undefined方法`exists':符号:符号

时间:2013-02-27 13:24:27

标签: ruby ruby-on-rails-3 string activerecord null

我有一个表Program,其字段为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>

我收到此错误消息:

  

未定义方法`exists':符号:符号

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

而不是使用以下语法:

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

使用以下语法搜索符号不为零的记录:

Program.where("symbol is not null")

答案 1 :(得分:0)

您的情况应该是

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

答案 2 :(得分:0)

简单地说,你不能直接在你的finder方法中的符号上调用方法。由于语法原因,它目前在符号类的#exist符号上调用:symbol方法。

我对ActiveRecord queries的记忆有点不好,但你总是可以设置一个简单的字符串条件,如

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

表示符号不为空,也不是空字符串。

(这在您的控制器中,然后您将能够在视图中使用控制器实例变量@programs作为您的选择输入。)