【问题标题】:Ruby on Rails question regarding scope关于范围的 Ruby on Rails 问题
【发布时间】:2011-08-17 14:22:33
【问题描述】:

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

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

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

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 你能帮我解决这个问题吗?

谢谢:)

【问题讨论】:

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


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多