2010-06-06 69 views
0

我有這樣的路線:更改參數不名稱嵌套資源父

resources :tags do 
     resources :comments 
end 

所以:create行動的意見有以下形式

tag_comments POST /tags/:tag_id/comments(.:format) 

如何從:tag_id改變paramenter名:commentable_id

+0

什麼錯與下面的解決方案? – 2010-06-17 00:36:45

回答

2
map.tags do 
    resources :comments, :path_prefix => '/tags/:commentable_id' 
end 

或通過的before_filter

before_filter :tag2commentable 

private 
def tag2commentable 
    params[:commentable_id] = params[:tag_id] unless params[:tag_id].blank? 
end 

把它放在你的控制器

1

其中一個可能是你想要什麼:

map.resources :commentables, :as => "tags", :collection => :comments 
map.resources :commentables, :as => "tags", :has_many => :comments 

我認爲後者是正確的,這解析爲:

$ rake routes 
commentable_comments GET /tags/:commentable_id/comments(.:format) {:action=>"index", :controller=>"comments"} 
... 

但我想你的模型關係可能會以某種方式搞砸,因爲這沒有意義。不要介意修改你的文章並添加關於你的模型關係的信息嗎?

我想有

map.resources :commentables, :has_many => :tags 

map.resources :taggables, :has_many => :comments 

會更有意義:

commentable_tags GET /commentables/:commentable_id/tags(.:format) {:action=>"index", :controller=>"tags"} 
taggable_comments GET /taggables/:taggable_id/comments(.:format) {:action=>"index", :controller=>"comments"} 
+0

我認爲將資源名稱定義爲除您的模型名稱之外的問題是多態url方法將失敗。至少這是我的經驗。 – 2011-08-06 08:52:03