J'ai un tableau avec 200 enregistrements. Chaque enregistrement a un champ de titre qui est rempli. Je voudrais dynamiquement tirer tous les enregistrements qui commencent par une certaine lettre. Quelle est la meilleure façon de le faire avec des rails/postgres?Étant donné un Model.title, comment rechercher au mieux tous les enregistrements avec la première lettre = X
1
A
Répondre
4
utilisation LIKE
clause:
Model.where('LOWER(title) LIKE ?', 'x%')
1
Ce n'est pas trop difficile, vous pouvez simplement écrire une requête sql personnalisée mélangée avec une qualité d'enregistrement active. Ex:
Model.where("title LIKE 'X%'")
Cela renverrait la collection que vous demandez.
1
vous pouvez utiliser une chaîne où quelque chose comme ça:
Model.where("title like ?","#{params[:letter]}%")
mais je préfère personnellement utiliser AREL:
Model.where(Model.arel_table['title'].matches("#{params[:letter]}%"))
-2
En plus à theBrezilien's answer, si vous avez seulement 200 enregistrements (ou si vous avez besoin de filtrer un arr existant ay des objets), vous avez toujours l'option de la force brute:
a = Model.all
a.select { |m| m.title.downcase.starts_with? "x" }
En général, il devrait être plus performant pour le faire dans SQL où vous pouvez.
Merci, mais cela semble être sensible à la casse, est-il un moyen de rendre insensible à la casse? – AnApprentice
@AnApprentice J'ai édité la réponse, vous pouvez rechercher dans les titres 'LOWER'-cased :) –
Note @AnApprentice: J'ai édité la réponse et changé« X% »à« x% », sinon votre recherche retournerait toujours la collection vide. –