有没有更好的方法来写这个
我有一个条件,以前看起来非常干净,易于理解 像
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"])
任何帮助都将不胜感激。
感谢
答案 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
范围。