Вопрос Ruby on Rails относительно области действия

У меня есть следующая именованная область в моей модели

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

Несмотря на то, что есть записи с 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. Не могли бы вы помочь мне решить эту проблему.

Спасибо :)


person felix    schedule 03.05.2011    source источник


Ответы (1)


Измените это на:

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)
person Spyros    schedule 03.05.2011