未定义的方法`存在'为:符号:符号

问题描述:

我有一个表Program与字段calle Symbol未定义的方法`存在'为:符号:符号

我想检索所有程序,它们都在Symbol中有一个值。含义不是一个空字符串,而不是零。

如何使用ActiveRecord构建这样的查询?

这里是我的代码:

<div class="control-group"> 
    <%= f.label :program %> 
    <div class="controls"> 
    <%= f.select :program_id, Program.where(:symbol.exists => true).collect {|c| [c.name + " " + c.symbol, c.id]}, {}, :class => 'chzn-select' %> 
    </div> 
</div> 

我收到此错误信息:

未定义的方法'存在的:符号:符号

有什么建议?

+0

您正在使用控制器代码中的视图;您应该将该代码移动到您的控制器。 – 2013-02-27 13:34:09

而不是使用下面的语法:

Program.where(:symbol.exists => true) 

以下语法用于搜索记录,其中的符号不​​为零:

Program.where("symbol is not null") 

你的情况应该是这样的

Program.where("symbol IS NOT NULL AND symbol != ''") 

简单放,你不能直接调用你的finder方法中的符号。由于语法,它现在正在调用Symbol类的:symbol符号上的#exist方法。

我对ActiveRecord queries内存是有点不好,但你总是把一个简单的字符串条件像

@programs = Program.where("symbol <> ''") 

它说符号不为空,而不是一个空字符串无论是。

(这正好在你的控制器,然后你就可以使用控制器实例变量@programs在你看来你的选择输入。)