如何使用Rails范围动态构建活动记录查询

时间:2016-06-17 21:46:44

标签: ruby-on-rails ruby activerecord

我正在寻找一种更好的方法来动态构建活动记录查询而不需要创建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的干净实现。有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

在模型方法中:

def self.multi_search(your_params)
  scope = Model.scoped({})
  your_params.split(' ').map{|v| scope = scope.search(v)}
  scope
end