2011-02-17 84 views
2

我使用acts_as_taggable_on類固醇和我有這段代碼生成的鏈接標籤問題:的Rails的link_to與acts_as_taggable_on_steroids

<%= link_to tag, tag_path(:id => tag.name) %> 

,當我訪問的網址:

http://localhost:3000/tags/rails 

我得到的錯誤:

No action responded to rails. Actions: show 

但是,此URL的工作原理:

http://localhost:3000/tags/show/rails 

我在tags_controller.rb定義的表演動作

class TagsController < ApplicationController 
    def show 
    @stories = Story.find_tagged_with(params[:id]) 
    end 
end 

我有耙生成以下路線:路線:

  tags GET /tags(.:format)        {:controller=>"tags", :action=>"index"} 
       POST /tags(.:format)        {:controller=>"tags", :action=>"create"} 
     new_tag GET /tags/new(.:format)       {:controller=>"tags", :action=>"new"} 
     edit_tag GET /tags/:id/edit(.:format)     {:controller=>"tags", :action=>"edit"} 
      tag GET /tags/:id(.:format)       {:controller=>"tags", :action=>"show"} 
       PUT /tags/:id(.:format)       {:controller=>"tags", :action=>"update"} 
       DELETE /tags/:id(.:format)       {:controller=>"tags", :action=>"destroy"} 

所以我知道URL標籤/ rails指向路由標​​記/:id,並且我已經爲link_to提供了一個額外的參數來將標記名稱指定爲:id參數,但正如您所看到的,它不起作用。一個論壇建議我使用to_param,但我沒有標記模型和書建議反對它。我錯過了什麼?

我下面的Sitepoint書簡單地固定導軌2

編輯:增加工作的網址,看到上面

回答

0

嘗試增加給你的航線資源:在黑暗中

:requirements => { :id => /.*/ } 
0

拍攝這裏應該是

<%= link_to tag, tag_path(:id => tag.name) %>

<%= link_to tag, tag_path(:id => tag.id) %>

<%= link_to tag, tag_path(tag) %>

0

試試這個你鏈接:

link_to tag.name, { :action => :tag, :id => tag.name } 

我不知道軌道是什麼版本,重新使用,我假設3.

基本上,你使用的tag_path脫離id。如果你還沒有改變任何東西,那就意味着像tag/43這樣的標籤,其ID爲43。你建議覆蓋to_param的原因是你希望它取代標籤的名字,所以像tag/rails。爲此,你做這樣的事情:

class Tag 
    def to_param 
    name 
    end 
end 

最後,你將不得不改變show動作使用名稱,而不是id。所以@stories = Story.find_tagged_with(params[:name])。那麼我相信你會想要創建一個路徑來彌補這一點,所以在你的resources :tags之上,加上match "/tags/:name" => "tags#show"

0

對於我來說,它看起來像

resources :tags 

resource :tags 

首先將作爲其默認的index動作之間的routes.rb中的差異,第二不會有:指數,但它會在默認路線上顯示。