我正在寻找一种使用给定列/值哈希构建过滤器查询的简单方法。所有值都应该在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过滤器?
答案 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中的某些特定查询。