有条件地链接Rails ActiveRecord查询中的子句

Hom*_*ith 3 ruby ruby-on-rails rails-activerecord

我有一个表单,当填充时必须触发一个特定的查询,取决于表单具有哪些参数,所以我在我的模型中有一个方法,我认为应该是这样的:

def form_query(params)

  query = ''
  if params.has_key?('size')
    query = query.where(size: params['size'])
  end

  if params.has_key?('title')
    query = query.where(title: params['title'])
  end

  # More conditionals depending on params.
end
Run Code Online (Sandbox Code Playgroud)

我的问题是,query一开始必须做什么?我说query = '',但我想知道什么是基本情况,所以我可以有条件地添加更多'where'子句.

Dav*_*uth 6

查询不是字符串; 他们是查询对象.所以你想要类似的东西

query = YourModel.scoped # Rails 3; in Rails 4, use .all
if params.has_key?('size')
  query = query.where(size: params['size'])
end
Run Code Online (Sandbox Code Playgroud)

等等

  • 如果你使用rails 3(或者2),请确保使用`YourModel.scoped`而不是`YourModel.all`.在rails 3中,后者将立即返回表中的所有行. (2认同)