J'ai une méthode qui récupère les groupes présents dans certaines zones. Les groupes sont donnés par country_id, region_id et city_id.Optimisation de l'ignorance des variables non définies lors de la création de conditions de recherche dans Rails
L'interface utilisateur donne trois zones de sélection pour choisir un pays, une région de ce pays, puis une ville de cette région. Pour trouver tous les groupes dans une ville, j'ai ce code:
@groups = Group.find(:all, :conditions => {:city_id => params[:city_id]})
Tout cela fonctionne très bien, mais je veux aussi trouver tous les groupes dans une zone où n'est pas spécifié les critères inférieurs. Par exemple, si un pays et une région sont donnés, mais pas une ville, j'aimerais le trouver par région.
Ce que je fais est la suivante:
if !params[:city_id].nil?
@groups = Group.find(:all, :conditions => {:city_id => params[:city_id]})
else
if !params[:region_id].nil?
@groups = Group.find(:all, :conditions => {:region_id => params[:region_id]})
else
@groups = Group.find(:all, :conditions => {:country_id => params[:country_id]})
end
end
Cela fonctionne parfaitement bien, mais il semble que c'est un peu inefficace. Est-ce que je le fais de la meilleure façon ou je peux rationaliser un peu? Une idée que j'avais était d'avoir une seule recherche vérifiant tous les paramètres, mais je ne pouvais pas savoir comment ignorer efficacement les paramètres qui étaient nuls - mon idée principale était de vérifier ceux qui n'étaient pas définis et de les définir à quelque chose comme '*' ou 'true', mais ce n'est pas ainsi que SQL joue le jeu.
Je n'avais pas rencontré named_scopes dans mon court temps avec des rails - ceux-ci correspondent parfaitement à la facture, dans ce problème et dans d'autres domaines. Merci beaucoup. – SaucyK