Répondre

4

utilisation LIKE clause:

Model.where('LOWER(title) LIKE ?', 'x%') 
+0

Merci, mais cela semble être sensible à la casse, est-il un moyen de rendre insensible à la casse? – AnApprentice

+1

@AnApprentice J'ai édité la réponse, vous pouvez rechercher dans les titres 'LOWER'-cased :) –

+0

Note @AnApprentice: J'ai édité la réponse et changé« X% »à« x% », sinon votre recherche retournerait toujours la collection vide. –

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.