Rails не может найти мой маршрут, но он существует! - PullRequest
0 голосов
/ 30 мая 2010

Хорошо, у меня есть события, которые я хочу опубликовать / отменить публикацию с дополнительным действием (nonRESTful). Я смотрел Railsh-передачу Райана Бейтса по этому поводу: 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"}"

так что дает? (И я попытался перезапустить мой сервер, чтобы это было не так.)

EDIT: Это работает:

<%= 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 Ответ

3 голосов
/ 30 мая 2010

Это не будет работать в моем файле /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 в первый хеш. *

...