J'ai une page de liste simple avec un couple de statut de filtres de recherche qui est une énumération simple et une requête de test que je veux comparer à la fois le titre et le champ de description de mon modèle.Mélange facultatif de paramètres de filtre dans une recherche de la manière Rails
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 peux mélanger les deux types de conditions (le hachage et la version paramatized). Est-il un « Way Rails » de le faire ou dois-je simplement faire quelque chose de terrible 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 migration d'Hibernate et critères alors pardonnez-moi si je ne pense pas à cela correctement. ..
Environnement: Rails 2.3.4
Juste pour clarifier, est-ce que le "scoped" est disponible dans Rails 2.x ou est-ce une amélioration de Rails 3? – GSP
Il est disponible depuis que named_scope-s a été ajouté - depuis Rails 2.1.0. C'est juste une portée nommée, qui est définie pour toutes les classes ActiveRecord. Voir http://apidock.com/rails/ActiveRecord/NamedScope/included/class – Voyta