Rails: Comment trouver_ par un champ contenant une certaine chaîne

J’ai un modèle nommé Topic, qui porte un nom en tant que champ.

Alors dis-moi que je cherche un terme, Apple.

Si je fais un

Topic.find_by_name("apple") 

Je reçois un disque avec le nom de pomme. C’est bien – mais comment puis-je changer find_by_name pour qu’il puisse trouver “apple juice” aussi bien que “apple” – en gros, trouver les noms qui contiennent la requête originale ou correspondent exactement à la requête d’origine?

Edit: Merci pour toute la réponse. Je suppose que j’aurais dû être un peu plus clair plus tôt, mais que faire si je veux trouver par un nom de variable (évidemment, je ne vais pas vouloir trouver par le nom “apple” à chaque fois :))?

Comment puis-je manipuler Topic.where pour y répondre? Donc quelque chose comme …

 @topic = Topic.where(......., @name) 

Je pense que quelque chose comme ça devrait fonctionner:

 Topic.where("name like ?", "%apple%") 

Pour accueillir votre édition:

 Topic.where("name like ?", "%#{@search}%") 

Interpolation de base des chaînes, vous utilisez la valeur de @search dans la chaîne %% , donc vous @search = "apple" vous vous retrouvez alors avec %apple%

On dirait que dans Rails 3, vous voudriez utiliser le:

 Topic.where("name ILIKE ?", "%apple%") 

Ne mettez pas de chaîne directement comme ça. Son appelé injection SQL. Vous devriez plutôt utiliser .where :

 Topic.where("name like '?%' ", params[:name]) 

Avec PostgreSQL, vous pouvez également utiliser des opérateurs de correspondance :

 Topic.where("name ~* ?", @search) 

Essayer

 Topic.where("name like ?",'%apple%') Topic.find(:all, :conditions => ["name like ?","%apple%"])