Ruby on rails 轨道可以';我找不到我的路线,但它存在!

Ruby on rails 轨道可以';我找不到我的路线,但它存在!,ruby-on-rails,custom-routes,Ruby On Rails,Custom Routes,好的,我有一些我想用额外的动作发布/取消发布的事件(非restful),我看了Ryan Bates的railscast:这让我大吃一惊。我认为问题在于我的路由嵌套在/admin部分,因此即使我运行rake routes并获得: publish_admin_event PUT /admin/events/:id/publish(.:format) {:controller=>"event_services", :action=>"publish"} 这在my/views/admin/

好的,我有一些我想用额外的动作发布/取消发布的事件(非restful),我看了Ryan Bates的railscast:这让我大吃一惊。我认为问题在于我的路由嵌套在
/admin
部分,因此即使我运行
rake routes
并获得:

publish_admin_event PUT /admin/events/:id/publish(.:format) {:controller=>"event_services", :action=>"publish"}
这在my/views/admin/index.html.erb文件中不起作用:

<%= link_to 'Publish', publish_admin_event(event), :method => :put %>
<%= link_to 'Publish', publish_admin_event(event), :method => :put %>
但我不想这样做

编辑#2: 我的路线入口:

map.resource :admin do |admin|
  admin.admin '', :controller => :admin, :only => :index
  admin.resources :events, :controller => :event_services, :member => {:publish => :put } do |service_event|
    # ...
  end
end
这在my/views/admin/index.html.erb文件中不起作用:

<%= link_to 'Publish', publish_admin_event(event), :method => :put %>
<%= link_to 'Publish', publish_admin_event(event), :method => :put %>
如果您执行
:controller=>“/admin/event\u services”
(如果您已经在admin名称空间中,则不需要这样做),并且如您在注释中所述,将
:id=>event
移动到第一个散列中,这将起作用

这在my/views/admin/index.html.erb文件中不起作用:

<%= link_to 'Publish', publish_admin_event(event), :method => :put %>
<%= link_to 'Publish', publish_admin_event(event), :method => :put %>

如果您执行
:controller=>“/admin/event\u services”
(虽然如果您已经在admin名称空间中,这是不必要的),并且正如您在评论中所指出的,将
:id=>event
移动到第一个哈希中。

您可以发布您的路由条目吗?@Andy Gaskell:发布了,但我可能会接受sepp2k的回答。如果你有什么有用的补充作为答案,我会投票给你。你能发布你的路线条目吗?@Andy Gaskell:发布了,但我可能会接受sepp2k的答案。如果你有什么有用的补充作为答案,我会投票给你。第一部分奏效了!我不知道我忘记了路径的部分是什么!第二部分不起作用。查看我的第二次编辑。好的,如果我离开:controller=>:event\u services并将我的:id=>事件放入第一个哈希中,第二次可以工作。@DJTripleThreat:Oops,我没有看到。是的,如果您已经在admin名称空间中,事件\ u服务将起作用<代码>管理/事件\u服务在顶级命名空间中工作。无论您身在何处,
/admin/event\u services
都将起作用。第一部分起作用了!我不知道我忘记了路径的部分是什么!第二部分不起作用。查看我的第二次编辑。好的,如果我离开:controller=>:event\u services并将我的:id=>事件放入第一个哈希中,第二次可以工作。@DJTripleThreat:Oops,我没有看到。是的,如果您已经在admin名称空间中,事件\ u服务将起作用<代码>管理/事件\u服务在顶级命名空间中工作。无论您身在何处,
/admin/event\u services
都能正常工作。