我想在rails 3中创建一个动态命名范围,条件是传入的参数.例如:
class Message < AR::Base
scope :by_users, lambda {|user_ids| where(:user_id => user_ids) }
end
Message.by_users(user_ids)
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够使用空数组user_ids来调用此范围,在这种情况下不应用where.我想在范围内做这个的原因是我将把这些中的几个链接在一起.
我该如何工作?
Mik*_*wis 49
要回答您的问题,您可以:
scope :by_users, lambda {|user_ids|
where(:user_id => user_ids) unless user_ids.empty?
}
Run Code Online (Sandbox Code Playgroud)
然而
我通常只是scope用于简单的操作(为了可读性和可维护性),之后的任何事情,我只是使用类方法,所以类似于:
class Message < ActiveRecord::Base
def self.by_users(users_id)
if user_ids.empty?
scoped
else
where(:user_id => users_id)
end
end
end
Run Code Online (Sandbox Code Playgroud)
这将在Rails 3中起作用,因为它where实际上返回一个ActiveRecord::Relation,您可以在其中链接更多查询.
我也在使用#scoped,它将返回一个匿名范围,这将允许您链接查询.
最后,这取决于你.我只是给你选择.
| 归档时间: |
|
| 查看次数: |
14467 次 |
| 最近记录: |