2010-11-13 14 views
6

Używam acts_as_taggable_on v.2.0.3 w Rails 3, aby dodać znaczniki do postów. Dodałem chmurę znaczników, jak opisano tutaj: https://github.com/mbleigh/acts-as-taggable-on, ale napotkano błąd: ActionController :: RoutingError w Posts # index: Brak trasy odpowiada {: action => "tag",: id => "polityka", : controller => "posts"}. Moje kodu jest poniżej:Szyny 3 - błąd routingu podczas używania act_as_taggable_on v.2.0.3

PostHelper:

module PostsHelper 
    include TagsHelper 
end 

modelu 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 

Widok:

<% 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 

Co robię źle? Dziękuję za odpowiedzi.

+0

Czy możesz opublikować swój plik routes.rb? – rwilliams

+0

Dodaję plik routes.rb do mojego pytania powyżej. –

Odpowiedz

7

Hmm, myślę, że rozumiem. Najpierw edytowany routes.rb w taki sposób:

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

drugie, dodałem metodę "Tag" w PostController:

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

To działa!

0

Dla podejścia Rails4 @muki_rails nie działa. To, co zrobiłem:

W routes.rb:

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

Teraz mogę to zrobić w widoku (używam slim):

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

Wtedy w moim ArticlesController jeśli zmienna params[:tag] jest ustawiony, szukam wszystkich odpowiadających artykułów pasujących do danego zadania.

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