Disons que j'ai un formulaire où les utilisateurs peuvent rechercher des personnes dont le nom commence par une chaîne name
particulière, par exemple, «Mi» trouverait «Mike» et «Miguel». Je probablement créer une déclaration de découverte comme ceci:Conditions avec des variables Bind et des paramètres facultatifs
find(:all, :conditions => ['name LIKE ?', "#{name}%"])
Disons que la forme a également deux champs facultatifs, hair_color
et eye_color
qui peut être utilisé pour filtrer davantage les résultats. Ignorant la partie du nom de la requête, une déclaration de découverte pour les personnes qui peuvent prendre un nombre arbitraire de paramètres facultatifs pourrait ressembler à ceci:
find(:all, :conditions => { params[:person] })
qui pour mes deux paramètres facultatifs se comporteraient comme l'équivalent de ce :
find(:all, :conditions => { :hair_color => hair_color, :eye_color => eye_color })
ce que je ne peux pas comprendre comment fusionner ces deux types de requêtes où le champ est obligatoire, « name » est appliqué à la condition « comme » ci-dessus, et l'option hair_color
et eye_color
paramètre Des ers (et peut-être d'autres) peuvent être ajoutés pour filtrer davantage les résultats.
Je peux certainement créer une chaîne de requête pour ce faire, mais je pense qu'il doit y avoir une «voie de rails» qui soit plus élégante. Comment puis-je fusionner des paramètres de liaison obligatoires avec des paramètres facultatifs?
Juste une curiosité. Comment l'étendriez-vous si la spécification de la chaîne de nom était également facultative? – Waseem
Je savais qu'il devait y avoir une belle façon propre de le faire. Il y a toujours des rails :-) Merci! – SingleShot
@waseem, j'ai modifié la solution pour répondre à votre question. – EmFi