2015-09-24 1 views
0

J'utilise acts-as-taggable-on pour marquer un modèle de voiture. J'ai trois différents contextes de tag: Marque, Couleur & Caractéristiques. Les deux premiers Make & Color sont prédéfinis dans une variable ENV et le dernier contexte est généré par l'utilisateur (fenêtres automatiques, sièges chauffants, etc.)Rails agit en tant que taggable sur - Filtre de tag de contexte multiple

Ce que je voudrais faire est de faire en sorte que de ma page d'index être filtré par plusieurs tags à la fois. Ainsi, par exemple, je voudrais une série de cases à cocher en haut de la page d'index un ensemble distinct pour chaque contexte où un utilisateur peut vérifier Hyundai & Red et l'index des voitures peuplerait avec seulement Hyundais rouge. En ce moment j'ai un itinéraire et un peu de code dans mon contrôleur de voiture qui me permet de filtrer par une étiquette mais je voudrais le modifier pour filtrer par tout ce qu'un utilisateur sélectionne.

routes.rb

get 'tags/:tags', to: 'cars#index', as: :tag 

contrôleur

def index 
if params[:keyword].present? 
    @cars = Car.tagged_with(params[:keyword]) 
else 
    @cars = Car.all.order(:cached_weighted_score => :desc) 
end 
end 
+0

Discuter de votre opinion? Pouvez-vous mettre à jour votre question? – akbarbin

+0

ma vue est assez complexe mais c'est juste une boucle sur la variable d'instance @cars – ChiefRockaChris

+0

Utilisez-vous l'option select pour rechercher votre tag? – akbarbin

Répondre

1

Le @selected_tag est des balises qui ont été sélectionnés en tant que paramètre dans la page d'index.

Contrôleur

def index 
if params[:keyword].present? 
    @selected_tag = params[:keyword] 
    @cars = Car.tagged_with(params[:keyword]) 
else 
    @cars = Car.all.order(:cached_weighted_score => :desc) 
end 
end 

Voir

Il est seulement vue prototype, donc vous devez combiner avec votre propre code.

<% @tags.each do |tag| %> 
    <div> 
     <%= check_box_tag "keywords[]", tag.name, @selected_tag.present? ? @selected_tag.include?(tag.name) : '' %> 
     <%= tag.name %> 
    </div> 
<% end %> 

J'espère pouvoir donner un aperçu général de ma description. Pour plus d'informations à prepopulate data in checkbox

+0

Donc, cela fonctionne, il crée la case à cocher dans la vue, mais il a automatiquement tous les vérifier, il n'a pas le moyen de soumettre une requête de cases à cocher sélectionnés. – ChiefRockaChris

+0

Donc, je l'ai compris, j'avais besoin d'un bouton de soumission, puis j'ai enlevé la variable tag @selected mettra à jour mon code. Merci votre réponse me mettre sur la bonne voie – ChiefRockaChris

+1

De rien. Oui, tu as raison. Vous pouvez ajouter le bouton soumettre ici. Bonne chance. – akbarbin