2010-06-06 75 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