有一定的困难,搞清楚如何从这个SQL查询named_scope:的Rails 2.3:如何把这个SQL语句转换成一个named_scope
select * from foo where id NOT IN (select foo_id from bar) AND foo.category = ? ORDER BY RAND() LIMIT 1;
类别应该是可变的改变。
为上述问题编写named_scope的最有效方法是什么?
有一定的困难,搞清楚如何从这个SQL查询named_scope:的Rails 2.3:如何把这个SQL语句转换成一个named_scope
select * from foo where id NOT IN (select foo_id from bar) AND foo.category = ? ORDER BY RAND() LIMIT 1;
类别应该是可变的改变。
为上述问题编写named_scope的最有效方法是什么?
named_scope :scope_name, lambda { |category|
{
:conditions => ["id NOT IN (select foo_id from bar) AND foo.category = ?", category],
:order => 'RAND()',
:limit => 1
}
}
超过一个答案评论的,但它不会真正适合...
zed_oxff是在球上。
为了简化事情并使其保持干爽,您可以考虑定义离散的命名范围而不是一个大的范围,并将它们链接在一起。
例如:
named_scope :random_order, :order => 'RAND()'
named_scope :limit, :lambda => { |limit| :limit => limit }
named_scope :whatever, ...
所以,你会按如下方式使用它们:
Person.random_order.limit(3).whatever