Rails 3 - ошибка маршрутизации при использовании acts_as_taggable_on v.2.0.3 - PullRequest
6 голосов
/ 14 ноября 2010

Я использую act_as_taggable_on v.2.0.3 в Rails 3 для добавления тегов к сообщениям. Я добавляю облако тегов, как описано здесь: https://github.com/mbleigh/acts-as-taggable-on,, но я столкнулся с ошибкой: ActionController :: RoutingError в сообщениях # index: нет совпадений маршрутов {: action => "tag",: id => "policy",: controller => "posts"}. Мой код указан ниже:

PostHelper:

module PostsHelper
  include TagsHelper
end

Модель Сообщение:

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

Вид:

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

Что я делаю не так? Спасибо за ваши ответы.

Ответы [ 2 ]

7 голосов
/ 14 ноября 2010

Хм, я думаю, я понимаю. Сначала я отредактировал маршруты .rb следующим образом:

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

Во-вторых, я добавил метод «Tag» в PostController:

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

Работает!

0 голосов
/ 26 мая 2016

Для Rails4 подход @muki_rails не сработал. Вот что я сделал:

В routes.rb:

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

Теперь я могу сделать это в представлении (я использую slim ):

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

Тогда в моем ArticlesController, если установлена ​​переменная params[:tag], я ищу все соответствующие статьи, соответствующие заданию.

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