Я хотел бы построить запрос в ActiveRecord на основе параметров GET и с использованием named_scope
.Я думал, что объединю некоторые области видимости и добавляю условия, основанные на доступности параметров GET, но я боюсь, что это приведет к перегрузке БД, посылая новый запрос на каждую добавленную часть запроса:
# in model
named_scope :sorted, :order => 'title, author'
named_scope :archived, :conditions => { :is_archived => true }
named_scope :by_date, lambda { |date| { :conditions => [ 'updated_at = ?', date ] } }
# in controller / helper
@articles = Article.sorted.all
@articles = @articles.by_date(params[:date]) if params[:date]
@articles = @articles.archived if params[:archived] == '1'
Другая опция, которую я имеюМысль о том, как создать цепочку метода, которая затем будет отправлена объекту с использованием Object#send
, но это кажется немного грязным и несколько проблематичным, когда named_scope получает аргументы (например, by_date
).Я понимаю, что могу создать строку запроса для использования с :conditions => ...
в ActiveRecord::Base#find
, но я подумал, что сначала попробую с named_scope, чтобы посмотреть, возможно ли выполнить ленивый запрос с последним.Любые предложения о том, как сделать это, используя named_scope и не подвергая базу данных бомбардировке запросами?спасибо.