为什么来自嵌套路由的id会被切换?

时间:2012-04-12 07:32:57

标签: ruby-on-rails ruby-on-rails-3 routes

我的管理命名空间下有一个嵌套资源: admin/topic/comments_controller.rbadmin/topics_controller.rb下的资源。

  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。我做错了什么?

2 个答案:

答案 0 :(得分:2)

您可以改为使用name_route:

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

答案 1 :(得分:1)

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

或者如果您使用RESTFUL路线:

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

使用命名空间控制器和路由时,必须使用命名空间模型才能使link_to帮助程序正常运行。

例如,在app / models / admin / comment.rb

class Admin::Comment < Comment   
end