Weston Ganger
Weston Ganger

Reputation: 6732

How to Dynamically Build an Active Record Query with Rails Scopes

I am looking for a better way to dynamically build a active record query without making a sql string.

The following method does a new search for every word in the search_str and returns the records that are returned by all the search scopes.

  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
  }

It works, but this is not a clean implementation with the use of eval. Is there a better way of doing this?

Upvotes: 0

Views: 733

Answers (1)

DennisCastro
DennisCastro

Reputation: 161

In a model method:

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

Upvotes: 1

Related Questions