基于params的动态ActiveRecord查找器方法链接

我是rails的新手,我想基于不同的GET参数(过滤和排序)进行选择查询。 我可以在代码中添加条件吗?

例如:

if params[:ratings] Movie.where(:rating => params[:ratings].keys) end 

然后添加排序和其他条件。 我怎么能得到这个? 也许有一种更好的方法来动态修改选择查询(不需要创建SQL字符串)。 谢谢。

whereorder ,…方法返回ActiveRecord :: Relation对象,以便您可以继续调用更多查询方法:

 query = Movie if(params[:ratings]) query = query.where(:rating => params[:ratings].keys) end if(params[:some_order_param]) query = query.order(params[:some_order_param]) end # Keep adding more 'where', 'order', 'group', ... methods as needed ... results = query.all 

我实际上推荐这种行为的has_scope gem 。 它允许您在模型上定义范围和类方法,并自动将它们用于控制器中的过滤,排序等。

这是文档中的一个小例子,但你可以用它做很多事情:

 class Graduation < ActiveRecord::Base scope :featured, where(:featured => true) end class GraduationsController < ApplicationController has_scope :featured, :type => :boolean end