我的模型中有以下命名范围
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 你能帮我解决这个问题。
谢谢:)
答案 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)