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