0

好的,我有想要通过额外操作发布/取消发布的事件(非 RESTful) 我在此观看了 Ryan Bates 的 railscast: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
4

1 回答 1

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"(尽管如果您已经在 admin 命名空间中则没有必要),并且正如您在评论中发现的那样,:id => event进入第一个哈希。

于 2010-05-30T18:47:38.420 回答