ActiveRecord混合条件+更好的写入方式

时间:2010-09-29 09:43:40

标签: ruby-on-rails activerecord conditional-statements

有没有更好的方法来写这个

我有一个条件,以前看起来非常干净,易于理解 像

Account.first.websites.last.users.find(:all,
             :conditions => {:country => "XYZ",:status => "Single",:admin => nil)

现在最大的问题是没有选择 admin = false 的用户。

即我想要来自特定国家/地区的所有用户,状态为 “Single”和admin是“nil”(数据库中为Null)或“false”。

我设法获得所需的代码,但似乎并不满意清晰度 它的。

Account.first.websites.last.users.find(:all,
    :conditions => ["country = ? AND status = ? AND admin IS NULL OR 
       admin = ?","XYZ","Single","false"])

任何帮助都将不胜感激。

感谢

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

Account.first.websites.last.users.all(:conditions => ["country = ? AND status = ? AND admin != true","XYZ","Single"])

答案 1 :(得分:1)

我会在模型中添加一些范围:

scope :not_admin, where("admin is null or admin = ?", false)
scope :single, where("status = ?", "single")
scope :from_country, lambda {|country| where("country = ?", country}

然后在控制器中使用它:

Account.first.websites.last.users.from_country("XYZ").single.not_admin

您还可以使用自动生成的范围:

Account.first.websites.last.users.scoped_by_country("XYZ").scoped_by_status("single").not_admin

此处我只留下not_admin范围。