2017-05-14 3 views
0

J'ai donc act_as_taggable qui fonctionne correctement. Je suis en mesure d'ajouter les tags lors de la création d'un nouveau post et je peux voir tous les tags en regardant les messages. Qu'est-ce que Im essayant de faire est de créer un lien de nav pour certaines balises. Par exemple, je veux un lien de nav qui dit "Films" et quand je clique sur ce lien, je veux que tous les messages que j'ai créés qui ont le tag "Films" à montrer. Ceci est mon post_controller.rbLien vers tous les messages avec le même tag, en utilisant acts_as_taggable

def index 
    @posts = current_author.posts.most_recent 
end 

def show 
end 

def new 
    @post = current_author.posts.new 
end 

private 
    def set_post 
    @post = current_author.posts.friendly.find(params[:id]) 
    end 

    def post_params 
    params.require(:post).permit(:title, :body, :description, :banner_image_url, :tag_list) 
    end 
end 

end 

Mon post.rb qui traite les balises

acts_as_taggable # Alias for acts_as_taggable_on :tags 

extend FriendlyId 
friendly_id :title, use: :slugged 

belongs_to :author 


scope :most_recent, -> { order(published_at: :desc) } 
scope :published, -> { where(published: true) } 
scope :with_tag, -> (tag) { tagged_with(tag) if tag.present? } 

scope :list_for, -> (page, tag) do 
recent_paginated(page).with_tag(tag) 
end 

Répondre

1

Vous pouvez créer un itinéraire personnalisé que le bouton de navigation peut établir un lien.

<%= link_to "Movies, tagged_posts_path("Movies") %> 

Dans posts_controller, créez une méthode pour l'itinéraire personnalisé. La route personnalisée peut utiliser la portée 'with_tag' pour renvoyer uniquement les posts marqués avec 'Movies' à votre vue. Assurez-vous d'ajouter la nouvelle route personnalisée au fichier Routes.

resources :posts do 
    collection do 
    get "/tagged/:tag", to: "posts#tagged", as: "tagged" 
    end 
end 
+0

Merci, cela va définitivement dans la bonne direction. Je me demande aussi cela, j'ai déjà mes pages séparées et les liens de configuration pour les balises que je veux utiliser. Donc, j'ai déjà sur mon nav "Films", "TV" et "Musique", ils sont juste des pages vierges lorsque vous cliquez sur eux. Serait-il simplement plus facile de simplement appeler l'étiquette pour cette page spécifique, au lieu de devoir créer un nouvel itinéraire et un nouveau modèle de vues. Ainsi, par exemple, sous Films, il suffit d'avoir un tag d'appel @ posts.tagged_with ("films"). –

+0

Tweaked certaines choses autour de mon code et cela a parfaitement fonctionné. Je vous remercie. –

+0

Vous pouvez utiliser l'itinéraire d'index existant et, dans la méthode du contrôleur, vérifier l'existence d'un paramètre d'étiquette. La méthode link_to devrait passer l'étiquette légèrement différemment, par ex. link_to "Movies", posts_path, {tag: "Films"}. Pourrait être une meilleure solution si vous avez beaucoup de différents tags à lier. – margo