Отказ от ответственности: я новичок в Ruby и Rails, и я все еще пытаюсь изучить Ruby Way, чтобы делать что-то, но я программировал более половины своей жизни, и профессионально в течение десятилетия. СУХОЙ - это концепция, с которой я очень знаком. Вот как я это реализовал. Это очень похоже на ответ Нарска, который я тоже считаю хорошим.
# name_searchable.rb
# mix this into your class using
# extend NameSearchable
module NameSearchable
def search_by_prefix (prefix)
self.where("lower(name) LIKE '#{prefix.downcase}%'")
end
end
А потом в вашей модели:
class User < ActiveRecord::Base
extend NameSearchable
...
end
А потом, когда вы захотите его использовать:
User.search_by_prefix('John') #or
User.search_by_prefix("#{name_str}")
Одна вещь, чтобы вызвать:
Традиционные реляционные базы данных не очень хорошо справляются с такими запросами. Если вы ищете высокочувствительную реализацию, которая не убьет ваши базы данных под нагрузкой, вам, вероятно, следует использовать решение, специально адаптированное для этой цели. Популярные примеры включают Solr или Sphinx, а также множество других. С этой реализацией, поскольку вы DRY, вы можете заменить реализацию отдельным индексатором в одном месте, и вы будете готовы к работе.