Rails使用LIKE进行简单过滤

时间:2014-10-19 15:52:44

标签: ruby-on-rails ruby

我正在寻找一种使用给定列/值哈希构建过滤器查询的简单方法。所有值都应该在LIKE查询中使用。我可以在数组中构建查询和参数,并将其传递到where,如下所示:

  def self.filter(filters=nil)

    if filters.nil? || filters.empty?
     return all
    end

    query = []
    value_array = []
    filters.each do |key, value|
      query << "#{key} LIKE ?"
      value_array << "%#{value}%"
    end

    where([query.join(' AND ')] + value_array)

  end

但是我想知道是否有更好的方法可以在Rails中使用(使用版本4),或者是否有一个超级简单的gem可以轻松接受has并转换为LIKE过滤器?

1 个答案:

答案 0 :(得分:1)

在查询中使用哈希值很好的方法是使用Hash#slice方法和范围:

...
filtering_params(params).each do |key, value|
   @products = @products.public_send(key, value) if value.present?
end

def filtering_params(params)
 params.slice(:status, :location, :starts_with)
end

class Product < ActiveRecord::Base
   scope :status, -> (status) { where status: status }
   scope :location, -> (location_id) { where location_id: location_id }
   scope :starts_with, -> (name) { where("name like ?", "#{name}%")}
end

取自here。毕竟,您可能需要将逻辑限制在DSL中的某些特定查询。