Попробуйте таким образом сделать сферу в модели Product
class Product < ActiveRecord::Base
scope :search_ndh, -> (name_text, desc_text, highlight_text){where("lower(name) LIKE :name OR description LIKE :desc OR highlight LIKE :high", name: "%#{name_text.downcase}%", desc: "%#{desc_text}%", high: "%#{highlight_text}%")}
end
и теперь используют сферу
@products.search_ndh(params[:search_free_text].downcase, params[:search_description_text], params[:search_highlight_text])
или Arel ways
products = Product.arel_table
Product.where(products[:name].matches("%#{params[:search_free_text]}%").or(products[:description].matches("%#{params[:search_description_text]}%")).or(products[:highlight].matches("%#{params[:search_highlight_text]}%")))
или в объеме с помощью динамических полей
class Product < ActiveRecord::Base
SEARCH_COLUMNS = [:name, :description, :highlight]
scope :search, lambda{ |q| where(SEARCH_COLUMNS.map{|c| self.arel_table[c].matches("%#{q}%").to_sql}.join(' OR '))}
end
и затем
Product.search(params[:search_text])
он будет генерировать
Product.search("das")
SELECT "products".* FROM "products" WHERE ("products"."name" LIKE '%das%' OR "products"."description" LIKE '%das%' OR "products"."highlight" LIKE '%das%')
Отлично работает !!! Благодаря!! – d3bug3r