Как вы можете заставить redirect_ использовать другой HTTP-запрос?

StackOverflow https://stackoverflow.com/questions/670250

Вопрос

В конце одного из действий моего контроллера мне нужно перенаправить на страницу, которая принимает только запросы put.Я пытался выяснить, как заставить redirect_to использовать запрос put, но безуспешно.

Возможно ли это?Или есть другой способ добиться этого?

Это было полезно?

Решение 3

Итак, я нашел решение своей проблемы.Я нашел очень хорошую статью об этой ситуации здесь.Моя реализация выглядит примерно так:

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]

Таким образом, я смог "подделать" запрос put, сделав запрос post (используя redirect_post), а затем присваивает 'put' a _method параметр.Если вы посмотрите на обычный put запрашивать все, что есть post из формы с _method параметр.Так что это немного халтурно, но свою работу выполняет.

Кроме того, вы должны убедиться, что, когда вы звоните redirect_post значения вашего хэша являются строками, в противном случае будут выдаваться ошибки.

Другие советы

Я не думаю, что вы в состоянии это сделать, и я подозреваю, что ограничение является частью самого HTTP.

При использовании перенаправление_то - перенаправление выполняется как заголовок "302 перемещено", если в параметрах не указано иное.

Просмотр самой спецификации HTTP не показывает никакого способа изменить тип запроса, который браузер выполняет с помощью перенаправления.

HTTP-редиректы:

Этот класс кода состояния указывает что агенту пользователя необходимо предпринять дальнейшие действия для выполнения запроса.Требуемое действие может осуществляется агента пользователя без взаимодействия с пользователем, если и только в случае, если метод, используемый в второй запрос GET или head.

Я думаю, вам, возможно, потребуется использовать JavaScript для достижения этой функциональности или, возможно, переосмыслить поток управления в вашем приложении.

Если действие находится в том же контроллере, откуда вы пытаетесь перенаправить, просто вызовите действие и отобразите шаблон следующим образом:

def show
  index
  render :action => "index"
end

Если это не так, то я не знаю, как вы это делаете.

Вы могли бы перенаправить на другую страницу, которая выдает запрос put от клиента, использование Javascript.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top