你怎么能让redirect_to使用不同的HTTP请求?

时间:2009-03-21 23:45:49

标签: ruby-on-rails redirect http-request

在我的一个控制器操作结束时,我需要重定向到只接受put请求的页面。我一直试图弄清楚如何让redirect_to使用put请求但没有成功。

这可能吗?或者还有另一种方法可以实现这一目标吗?

4 个答案:

答案 0 :(得分:5)

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

使用 redirect_to 时 - 除非在参数中另有规定,否则重定向将作为“302 Moved”标题发生。

查看HTTP Spec本身并没有发现任何改变浏览器通过重定向发出的请求类型的方法。

HTTP Redirects

  

此类状态代码表示   需要采取进一步行动   由用户代理以实现   请求。需要采取的行动可能   由用户代理执行   如果没有与用户交互   并且只有在使用的方法中   第二个请求是GET或HEAD。

我认为您可能需要使用JavaScript来实现此功能,或者可能需要重新考虑应用程序中的控制流。

答案 1 :(得分:3)

如果操作与您尝试重定向的控制器位于同一控制器中,只需调用操作并渲染模板,如下所示:

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

如果不是,那我就不知道你是怎么做的。

答案 2 :(得分:2)

好的,所以我找到了解决问题的方法。我发现了一个非常好的情况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参数的表单。所以它有点hackish但它完成了工作。

此外,您必须确保在调用redirect_post时哈希值是字符串,否则将引发错误。

答案 3 :(得分:1)

您可以重定向到另一个页面,该页面会发出来自客户端{42}的投放请求。

相关问题