ПРИМЕЧАНИЕ. Я прочитал статью Routing From the Inside Out AND the Engine Yard, посвященную маршрутизации.
Я создаю лигу фэнтези-спорта, у меня есть модель лиги, которая поддерживает семь основных операций отдыха, и все они работают нормально.
Я добавил следующие мои маршруты.rb
resources :leagues do
member do
get :invite
post :sendem
end
Позже в файле у меня есть ресурсы :leagues для основных действий.
а когда разгребаю маршруты вижу:
invite_league GET /leagues/:id/invite(.:format) {:action=>"invite", :controller=>"leagues"}
sendem_league POST /leagues/:id/sendem(.:format) {:action=>"sendem", :controller=>"leagues"}
чего я и ожидал. У меня есть две функции в контроллере League: «invite», которая создает форму для сбора адресов электронной почты, и «sendem», которая вызывает почтовую программу для фактической отправки приглашений.
Получение для /league/:id/invite действительно создает форму. Тег формы, который я использую, выглядит так:
<%= form_tag(sendem_league_path, :method => "post") do %>
и все же отображаемый HTML выглядит так:
<form accept-charset="UTF-8" action="/leagues/1" class="edit_league" id="edit_league_1" method="post">
И, следовательно, при отправке генерируется PUT, который совершенно неверен. (Он должен быть отправлен в функцию sendem.) Мое изменение в файле маршрутов отображается над общей строкой ресурсов :leagues, поэтому оно должно иметь более высокий приоритет.
Я уверен, что есть что-то очень простое, что я пропустил, но у меня нет идей. (И волосы).