0

OK、追加のアクションで公開/非公開したいイベントがあります(RESTfulではありません)これでライアンベイツの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"(ただし、既に管理名前空間にいる場合は必要ありません)、コメントでわかったよう:id => eventに、最初のハッシュに移動します。

于 2010-05-30T18:47:38.420 に答える