Если вы хотите сделать это с обычным ActiveRecord / SQL, вы можете сделать это следующим образом:
words = params[:query].split(' ')
# => ["Maria", "chubbb"]
conditions = words.collect {|word| "name LIKE ? OR subject LIKE ?"}.join(" OR ")
# => "name LIKE ? OR subject LIKE ? OR name LIKE ? OR subject LIKE ?"
values = words.collect {|word| ["%#{word}%", "%#{word}%"]}.sum
# => ["%Maria%", "%Maria%", "%chubbb%", "%chubbb%"]
YourModel.where([conditions] + values)
Позже, если вы хотите сделать это «правильно», используйте поисковую систему, такую как Sphinx.(подключается через Ruby / Rails через inking_sphinx гем).Затем в вашей модели вы можете определить, какие поля включить в поиск следующим образом:
class YourModel < ActiveRecord::Base
define_index do
indexes :name
indexes :subject
end
end
Затем вы можете выполнить поиск следующим образом:
YourModel.search("Maria chubbb")
Преимущество здесь в том, что поиск быстрыйдаже в большой базе данных, и результаты могут быть взвешены, например, если оба совпадения совпадают, если совпадает только одно слово.