Ресурсные маршруты, но с действием #create с использованием GET вместо POST

Хотя это в целом противоречит нашим принципам проектирования, нам нужно, чтобы контроллер выполнял действие #create на GET-запросе (это часть рабочего процесса, который включает в себя серию перенаправлений для внешнего сервиса). Кто-нибудь знает, как это делается? Я не очень хочу выходить за пределы ресурсоемких рамок маршрутизации, предоставляемых маршрутами Rails. Нам не нужно действие #index, которое обычно отвечает на этот GET-запрос.

Я обнаружил (на удивление), что это работает, но я не знаю, так ли это задумано, или мы используем ошибку в Rails и рискуем сломаться позже:

resources :agreements, :except => [:index, :create] do
  get :create, :on => :collection
end

Если бы этот get :create был get :something, у нас был бы маршрут вроде

Helper:  something_agreement_path
Request: GET /agreements/:agreement_id/something
Action:  agreements#something

Но Rails действительно генерирует то, что мы хотим:

Helper:  agreements_path
Request: GET /agreements
Action:  agreements#create

Ошибка или особенность?

6
задан d11wtq 14 November 2011 в 09:02
поделиться