关于范围的Ruby on Rails问题

时间:2011-05-03 10:05:33

标签: ruby-on-rails ruby ruby-on-rails-3 scope named-scope

我的模型中有以下命名范围

class User
  scope :single_action, where("parent_id = ?", nil)
end

即使有一些带有nil值的parent_id的记录,它们似乎也不可用。

ruby-1.9.2-p0 > User.select("name")
 => [#<User parent_id: nil, name: "John">, #<Task parent_id: 1, name: "Felix">, #<Task parent_id: nil, name: "John Felix">]

我尝试使用活动记录查询来执行相同操作,但它也返回空结果集

ruby-1.9.2-p0 > User.where("parent_id = ?",nil)
 => []

我定义了一些似乎工作正常的其他范围。 我的Rails版本是3.0.7,Ruby版本是Ruby 1.9.2 你能帮我解决这个问题。

谢谢:)

1 个答案:

答案 0 :(得分:5)

将其更改为:

User.where(:parent_id => nil)

您可以看到差异(您实际上是在尝试匹配字符串'NULL'而不是检查值为NULL):

ruby-1.9.2-p180 :031 > User.where("remember_token = ?", nil)
 => [] 
ruby-1.9.2-p180 :032 > User.where(:remember_token => nil)
 => [#<User id: 232255501, .......

ruby-1.9.2-p180 :029 > User.where(:remember_token => nil).to_sql
 => "SELECT `users`.* FROM `users` WHERE (`users`.`remember_token` IS NULL)" 
ruby-1.9.2-p180 :030 > User.where("remember_token = ?", nil).to_sql
 => "SELECT `users`.* FROM `users` WHERE (remember_token = NULL)