好的,我有一些活动需要通过额外的动作发布/取消发布(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
答案 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
移到第一个散列。