我正在寻找一种更好的方法来动态构建活动记录查询而不需要创建sql字符串。
以下方法对search_str中的每个单词进行新搜索,并返回所有搜索范围返回的记录。
scope :multi_search, ->(search_str){
query = ''
if search_str.present?
search_str.split(' ').each do |x|
query += ".search('#{x}')"
end
eval(query[1..-1])
else
all
end
}
它可以工作,但这不是一个使用eval的干净实现。有没有更好的方法呢?
答案 0 :(得分:1)
在模型方法中:
def self.multi_search(your_params)
scope = Model.scoped({})
your_params.split(' ').map{|v| scope = scope.search(v)}
scope
end