Avertissement: je suis nouveau à Ruby et Rails, et je suis encore en train d'apprendre le Ruby Façon de faire les choses, mais j'ai été codant pour plus de la moitié de ma vie, et professionnellement depuis une décennie. DRY est un concept avec lequel je suis très familier. Voici comment j'ai mis en œuvre. Il est très similaire à narsk réponse, je pense que c'est aussi bon.
# 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
Et puis dans votre modèle:
class User < ActiveRecord::Base
extend NameSearchable
...
end
Et puis, quand vous voulez l'utiliser:
User.search_by_prefix('John') #or
User.search_by_prefix("#{name_str}")
Une seule chose à faire appel:
Traditionnels de bases de données relationnelles ne sont pas très bonnes à satisfaire à ces types de requêtes. Si vous êtes à la recherche pour une très sensible de la mise en œuvre qui ne sera pas tuer vos bases de données en vertu de la charge, vous devriez probablement utiliser une solution qui est adapté à la place. Des exemples comprennent Solr ou Sphinx, et il y a beaucoup d'autres. Avec cette mise en œuvre, depuis que vous SÉCHEZ, vous pouvez remplacer la mise en œuvre avec un indexeur en un seul endroit et vous être prêt pour le rock.