如何使用ActiveRecord执行复杂搜索

时间:2013-09-18 17:47:13

标签: ruby-on-rails-3 search activerecord

我有一个包含多个字段的搜索表单,目前有效。我已按以下方式编写了搜索操作:

conditions = {}
conditions[:x] = params[:x] unless params[:x].blank?
conditions[:y] = params[:y] unless params[:y].blank?
conditions[:z] = params[:z] unless params[:z].blank?
etc.
@results = Material.where(conditions)

这很好。但现在我想添加一个条件,基本上说“水平小于或等于params [:level],这在我脑海中看起来像这样:

conditions[:level] <= params[:level] ...

但这不起作用,因为看起来你只能使用这种语法添加哈希。所以我的问题是如何在查询中添加这样的条件。

1 个答案:

答案 0 :(得分:1)

您无法将其添加到现有的conditions哈希中。 key: value的哈希where参数只能生成where key = value,而不是key <= value

使用参数化字符串和其他where

@results = Material.where(conditions).where("level <= ?", params[:level])