2010-11-13 16 views
6

Estoy usando acts_as_taggable_on v.2.0.3 en Rails 3 para agregar etiquetas a las publicaciones. Agregué una nube de etiquetas como se describe aquí: https://github.com/mbleigh/acts-as-taggable-on, pero me encontré con un error: ActionController :: RoutingError en Posts # index: Ninguna ruta coincide con {: action => "tag",: id => "politics", : controller => "posts"}. Mi código es el siguiente:Rails 3: error de enrutamiento al usar acts_as_taggable_on v.2.0.3

PostHelper:

module PostsHelper 
    include TagsHelper 
end 

Modelo de la publicación:

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 

Vista:

<% 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é estoy haciendo mal? Gracias por tus respuestas.

+0

¿Puede por favor publicar su archivo routes.rb? – rwilliams

+0

Agrego el archivo routes.rb a mi pregunta anterior. –

Respuesta

7

Hmm, creo que entiendo. En primer lugar, he editado routes.rb de manera tal:

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

En segundo lugar, he añadido método de "etiqueta" en el PostController:

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

funciona!

0

Para Rails4 @muki_rails el enfoque no funcionó. Esto es lo que hice:

En routes.rb:

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

ahora que puedo hacer esto en la vista (estoy usando slim):

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

Luego, en mi ArticlesController si la variable params[:tag] está configurado, busco todos los artículos correspondientes que coincidan con la tarea dada.

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