1 votes

Mélange optionnel de paramètres de filtre dans une recherche à la manière de Rails

J'ai une page de liste simple avec deux filtres de recherche : le statut, qui est une simple énumération, et une requête de test que je veux comparer aux champs titre et description de mon modèle.

Dans mon contrôleur, je veux faire quelque chose comme ceci :

def index
  conditions = {}
  conditions[:status] = params[:status] if params[:status] and !params[:status].empty?
  conditions[???] = ["(descr = ? or title = ?)", params[:q], params[:q]] if params[:q] and !params[:q].empty?
  @items = Item.find(:all, :conditions => conditions)
end

Malheureusement, il ne semble pas que je puisse mélanger les deux types de conditions (le hachage et la version paramétrée). Existe-t-il une "méthode Rails" pour faire cela ou dois-je simplement faire quelque chose d'affreux comme ceci :

has_status = params[:status] and !params[:status].empty?
has_text = params[:q] and !params[:q].empty?
if has_status and !has_text
   # build paramatized condition with just the status
elsif has_text and !has_status
   # build paramatized condition with just the text query
elsif has_text and has_status
   # build paramatized condition with both
else
   # build paramatized condition with neither
end

Je suis en train de migrer depuis Hibernate et Criteria, alors pardonnez-moi si je ne pense pas correctement...

Environnement : Rails 2.3.4

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X