2010-11-13 3 views
6

J'utilise acts_as_taggable_on v.2.0.3 dans Rails 3 pour ajouter des balises aux articles. J'ajoute un nuage de tags comme décrit ici: https://github.com/mbleigh/acts-as-taggable-on, mais je rencontre une erreur: ActionController :: RoutingError dans Posts # index: Aucune route ne correspond {: action => "tag",: id => "politics", : controller => "messages"}. Mon code est ci-dessous:Rails 3 - erreur de routage lors de l'utilisation de acts_as_taggable_on v.2.0.3

PostHelper:

module PostsHelper 
    include TagsHelper 
end 

modèle Post:

class Post < ActiveRecord::Base 
    ... 
    acts_as_taggable_on :tags 
end 

PostController

class PostController < ApplicationController 
    ... 
    def tag_cloud 
    @tags = Post.tag_counts_on(:tags) 
    end 
end 

Vue:

<% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %> 
    <%= link_to tag.name, { :action => :tag, :id => tag.name }, :class => css_class %> 
<% end %> 

routes.rb:

Blog::Application.routes.draw do 
    root :to => "posts#index" 
    resources :posts do 
    member do 
     post :notify_friend 
    end 
    collection do 
     get :search 
    end 
    resources :comments 
    end 
    resources :users 
    resource :session 
    match '/login' => "sessions#new", :as => "login" 
    match '/logout' => "sessions#destroy", :as => "logout" 
end 

Qu'est-ce que je fais mal? Merci pour vos réponses.

+0

Pouvez-vous s'il vous plaît poster votre fichier routes.rb? – rwilliams

+0

J'ajoute le fichier routes.rb dans ma question ci-dessus. –

Répondre

7

Hmm, je pense que je comprends. Tout d'abord, j'édité routes.rb de telle manière:

resources :posts do 
    ... 
    collection do 
    get :tag 
    end 
end 

En second lieu, j'ajouté méthode "Tag" dans le PostController:

def tag 
    @posts = Post.tagged_with(params[:id]) 
    @tags = Post.tag_counts_on(:tags) 
    render :action => 'index' 
    end 

ça marche!

0

Pour Rails4, l'approche @muki_rails ne fonctionnait pas. Voilà ce que je l'ai fait:

En routes.rb:

get 'tags/:tag' => 'articles#index', as: 'tag' 

Maintenant, je peux le faire dans la vue (je me sers slim):

- @article.tags.each do |tag| 
    = link_to tag.name, tag_path(tag.name) 

Puis dans mon ArticlesController si la variable params[:tag] est défini, je recherche tous les articles correspondants qui correspondent à la tâche donnée.

def index 
    if params[:tag].present? 
     @articles = Article.published.tagged_with(params[:tag]) 
    else 
     @articles = Article.published 
    end 
    end