2012-04-12 59 views
1

我有我的管理命名空间下的嵌套资源: admin/topic/comments_controller.rbadmin/topics_controller.rb下的资源。为什么嵌套路由中的id会切换?

namespace :admin do 
    resources :topics do 
     resources :comments, :controller => "topic/comments" 
    end 
    end 

使我这个删除路线:

DELETE
/admin/topics/:topic_id/comments/:id(.:format)
admin/topic/comments#destroy

而且我创建一个链接来破坏注释,如下所示:

# comment = @topic.comment.first
<%= link_to "Destroy", [:admin, comment], :method => :delete %>

产生以下路线:

/admin/topics/165/comments/11

除了两个ID被交换,所有似乎都是正确的。我究竟做错了什么?

+0

我发现这是一个重复,以http://stackoverflow.com/questions/761360/strange-rails-routing-behaviour -with-nested-resources – lulalala 2012-04-12 07:55:18

回答

2

可以使用name_route代替:

<%= link_to "Destroy", admin_topic_comment_path(@topic, comment), :method => :delete %> 
+0

将会产生'undefined method admin_topic_topic_comment_path'错误 – lulalala 2012-04-12 07:42:53

+0

我用另一个解决方案更新我的答案 – shingara 2012-04-12 07:46:41

+0

谢谢,所以我猜''''路由不能单独实现一切。毕竟,命名的路线是辅助方法。 – lulalala 2012-04-12 07:53:19

1

<%= link_to 'Destroy', :action => 'destroy', :id => comment.id, :method => :delete %>

,或者如果您使用RESTFUL路线:

<%= link_to 'Destroy', delete_comment(:id => comment.id), :method => :delete %>

当与命名空间控制器和路线的工作,你必须使用命名空间模型以使link_to帮手正常工作。

例如,在应用程序/模型/管理/ comment.rb

class Admin::Comment < Comment 
end 
+0

谢谢,但我目前的设置没有。 – lulalala 2012-04-12 07:54:37