Я забыл об этом вопросе, вот как я делаю это сейчас
def search_in_all_fields model, text
model.where(
model.column_names
.map {|field| "#{field} like '%#{text}%'" }
.join(" or ")
)
end
Или лучше как прицел в самой модели
class Model < ActiveRecord::Base
scope :search_in_all_fields, ->(text){
where(
column_names
.map {|field| "#{field} like '%#{text}%'" }
.join(" or ")
)
}
end
Вам просто нужно назвать это так
Model.search_in_all_fields "test"
Прежде чем начать .., чтобы быть уверенным, что здесь нет инъекций sql, все же лучше и короче
class Model < ActiveRecord::Base
scope :search_all_fields, ->(text){
where("#{column_names.join(' || ')} like ?", "%#{text}%")
}
end