【问题标题】:Why are id's from nested route switched around?为什么嵌套路由中的 id 会被切换?
【发布时间】:2012-04-12 07:32:56
【问题描述】:

我的管理命名空间下有一个嵌套资源: 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

我正在创建一个链接来销毁 cmets,如下所示:

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

产生以下路线:

/admin/topics/165/comments/11

一切似乎都是正确的,只是两个 id 互换了。我做错了什么?

【问题讨论】:

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


【解决方案1】:

您可以改用 name_route :

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

【讨论】:

  • 会产生undefined method admin_topic_topic_comment_path错误
  • 谢谢,所以我猜[] 路由不能单独完成所有事情。毕竟需要命名路由辅助方法。
【解决方案2】:

&lt;%= link_to 'Destroy', :action =&gt; 'destroy', :id =&gt; comment.id, :method =&gt; :delete %&gt;

或者如果你使用 RESTFUL 路由:

&lt;%= link_to 'Destroy', delete_comment(:id =&gt; comment.id), :method =&gt; :delete %&gt;

使用命名空间控制器和路由时,您必须使用命名空间模型才能使 link_to 帮助器正常工作。

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

class Admin::Comment < Comment   
end

【讨论】:

    猜你喜欢
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    相关资源
    最近更新 更多