Если вы передаете массив в качестве значения, ActiveRecord достаточно умен, чтобы сравнить его для включения в массив. Например,
Book.where(:author_id => [1, 7, 42])
создает запрос SQL с предложением WHERE
, похожим на:
WHERE "author_id" IN (1, 7, 42)
Вы можете воспользоваться этим в scope
так же, как вы установили бы нормальные условия:
class Book < ....
# Rails 3
scope :by_author, lambda { |author_id| where(:author_id => author_id) }
# Rails 2
named_scope :by_author, lambda { |author_id
{ :conditions => {:author_id => author_id} }
}
end
Затем вы можете передать один идентификатор или массив идентификаторов by_author
, и он будет просто работать:
Book.by_author([1,7,42])