Хорошо, поэтому я нашел решение своей проблемы. Я нашел очень хорошую запись о ситуации here. Моя реализация выглядит следующим образом:
private
def redirect_post(redirect_post_params)
controller_name = redirect_post_params[:controller]
controller = "#{controller_name.camelize}Controller".constantize
# Throw out existing params and merge the stored ones
request.parameters.reject! { true }
request.parameters.merge!(redirect_post_params)
controller.process(request, response)
if response.redirected_to
@performed_redirect = true
else
@performed_render = true
end
end
Тогда я назвал этот метод так:
redirect_post :controller => 'registrations', :action => 'order', :_method => 'put', :authenticity_token => params[:authenticity_token]
Так что я был в состоянии «поддельные» запрос пут, сделав запрос на запись (с использованием redirect_post
), а затем присваивая 'put' параметру _method
. Если вы посмотрите на обычный запрос put
, все это post
из формы с параметром _method
. Так что это немного хакерский, но он выполняет свою работу.
Кроме того, вы должны убедиться, что при вызове redirect_post
значения вашего хэша будут строками, иначе будут выброшены ошибки.
'controller.process' больше не работает в рельсах 4 – josal