Rails无法找到我的路线,但它存在!

时间:2010-05-30 18:37:01

标签: ruby-on-rails custom-routes

好的,我有一些活动需要通过额外的动作发布/取消发布(nonRESTful)我看过Ryan Bates的导演:http://railscasts.com/episodes/35-custom-rest-actions并且它让我大部分时间。我认为问题是我的路线嵌套在/admin部分,所以即使我运行rake routes并获得:

publish_admin_event PUT /admin/events/:id/publish(.:format) {:controller=>"event_services", :action=>"publish"}

这不适用于我的/views/admin/index.html.erb文件:

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

因为它声称路径不存在!这也不会:

<%= link_to 'Publish', {:controller => :event_services, :action => :publish}, {:method => :put, :id => event} %>

并说“No route matches {:controller=>"event_services", :action=>"publish"}

那么给出了什么? (我已经尝试重新启动我的服务器,这不是它。)

修改 这项工作:

<%= link_to 'Publish', "/admin/events/" + event.id.to_s + "/publish", :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

1 个答案:

答案 0 :(得分:3)

  

这不适用于我的/views/admin/index.html.erb文件:

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

因为它声称路径不存在!

我宁愿因为NoMethodError而无法工作。我认为你打算在那里写publish_admin_event_path而不仅仅是publish_admin_event。然后它应该工作。

  

这也不会:

<%= link_to 'Publish', {:controller => :event_services, :action => :publish}, {:method => :put, :id => event} %>

如果您执行:controller => "/admin/event_services",这将有效(如果您已经在管理员命名空间中,则不需要这样做),并且正如您在评论中指出的那样,将:id => event移到第一个散列。