3

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

例如:

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

然后添加 ordering 和其他 where 条件。我怎样才能做到这一点?也许有更好的方法来动态修改选择查询(不制作 SQL 字符串)。谢谢。

4

2 回答 2

4

, where, order... 方法返回 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
于 2012-08-05T21:49:30.197 回答
3

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

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

class Graduation < ActiveRecord::Base
  scope :featured, where(:featured => true)
end

class GraduationsController < ApplicationController
  has_scope :featured, :type => :boolean
end
于 2012-08-05T22:02:13.990 回答