在确定如何从此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的最有效方法是什么?
答案 0 :(得分:7)
named_scope :scope_name, lambda { |category|
{
:conditions => ["id NOT IN (select foo_id from bar) AND foo.category = ?", category],
:order => 'RAND()',
:limit => 1
}
}
答案 1 :(得分:4)
更多的评论而不是答案,但它不适合......
zed_oxff在球上。
为了简化并保持干燥,您可以考虑定义离散的命名范围而不是一个大范围,并将它们链接在一起。
例如:
named_scope :random_order, :order => 'RAND()'
named_scope :limit, :lambda => { |limit| :limit => limit }
named_scope :whatever, ...
所以你会按如下方式使用它们:
Person.random_order.limit(3).whatever