我想基于 GET 参数在 ActiveRecord 中构造一个查询,并使用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'
我想到的另一个选择是构建一个方法链接字符串,然后使用 将其发送到对象,但是当 named_scope 接收参数(如)Object#send
时,这似乎有点脏并且有些问题。by_date
我意识到我可以构造一个与:conditions => ...
in一起使用的查询字符串ActiveRecord::Base#find
,但我想我会先尝试使用 named_scope 来查看是否可以使用后者进行惰性查询。关于如何使用 named_scope 并且不让数据库被查询轰炸的任何建议?谢谢。