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

#ruby-on-rails #ruby #ruby-on-rails-3 #scope #named-scope

#ruby-on-rails #ruby #ruby-on-rails-3 #область видимости #named-scope

Вопрос:

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

 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">]
  

Я попытался использовать запрос active record для выполнения того же самого, но он также возвращает пустой результирующий набор

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

Я определил несколько других областей, которые, похоже, работают нормально.
Моя версия Rails — 3.0.7, а версия Ruby — Ruby 1.9.2
Не могли бы вы, пожалуйста, помочь мне решить эту проблему.

Спасибо 🙂

Ответ №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)