目前我需要重定向到只接受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]

所以我能够“假”通过使POST请求(使用redirect_post),然后分配PUT请求“把”到_method PARAM。如果你看一下正常put请求的所有它是从一个post PARAM形式的_method。所以它是一个有点hackish,但它能够完成任务。

此外,你必须确保当你调用redirect_post你的散列值是字符串,否则错误将被抛出。

其他提示

我不认为你能做到这一点,我怀疑是限制HTTP本身的一部分。

当使用的 redirect_to的 - 重定向发生为 “302移到” 标题,除非在参数另有规定

有一看HTTP规格本身没有揭示任何方式改变的请求的浏览器经由重定向使得类型。

HTTP重定向

  

此类的状态码表示   采取进一步行动需要采取   通过以满足用户代理   请求。要求的动作可以   由用户代理进行   而不与用户的交互,如果   且仅当在所使用的方法   第二请求是GET或HEAD

我想你可能需要使用JavaScript来实现这一功能,或者重新考虑你的应用程序的控制流。

如果动作是在同一个控制器,你正试图从重定向,只需调用动作和渲染,像这样的模板:

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

如果不是的话,那么我不知道你是怎么做到这一点。

您可以重定向到另一个页面发出来自客户端的PUT请求,的使用Javascript

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top