2014-07-25 1 views
0

J'essaie de créer un formulaire de recherche avec plusieurs colonnes (toutes du même modèle) Maintenant, je veux définir la valeur de toutes les autres colonnes comme nulle si le La colonne category est définie sur une valeur particulière. Quelque chose comme this-Formulaire de recherche dynamique pour plusieurs colonnes du même modèle dans Rails 4

#app/models/question.rb 
if (cateogry.matches => 'Exam Questions') 

query = query.where("name like ? AND course like ? AND year like ?", "%#{query}%", "%#{query}%", "%#{query}%") 

else 

query = query.where("name like ?","%#{query}%") 

end 

Le formulaire de recherche est une forme de base en utilisant la méthode get.

Répondre

1

Vous pouvez utiliser des étendues pour cela.

class Question < ActiveRecord::Base 
    ... 

    # Scope for searching by exam 
    scope :by_exam, -> (name, course, year) { 
     match(:name, name). 
     match(:course). 
     match(:year, year) 
    } 

    # Scope forsearching by nma 
    scope :by_name, ->(name) { match(:name, name) } 

    # Helper scope for matching 
    scope :match, ->(key, value) { where(arel_table[key].matches("%#{value}%"} } 

end 

Donc dans votre contrôleur

if (cateogry.matches => 'Exam Questions') 
    Question.by_exam(params[:name], params[:course], params[:year]) 
else 
    Question.by_name(params[:name]) 
end 
Questions connexes