在我的一个控制器操作结束时,我需要重定向到只接受put请求的页面。我一直试图弄清楚如何让redirect_to使用put请求但没有成功。
这可能吗?或者还有另一种方法来实现这一目标吗?
在我的一个控制器操作结束时,我需要重定向到只接受put请求的页面。我一直试图弄清楚如何让redirect_to使用put请求但没有成功。
这可能吗?或者还有另一种方法来实现这一目标吗?
我不认为你能做到这一点,我怀疑这个限制是HTTP本身的一部分。
使用时 redirect_to的 - 除非在参数中另有规定,否则重定向将作为“302 Moved”标头发生。
看一下HTTP Spec本身并没有透露任何改变浏览器通过重定向发出的请求类型的方法。
此类状态代码表示 需要采取进一步行动 由用户代理以实现 请求。需要采取行动 由用户代理执行 如果没有与用户交互 并且只有在使用的方法中 第二个请求是GET或HEAD。
我认为您可能需要使用JavaScript来实现此功能,或者可能需要重新考虑应用程序中的控制流。
如果操作与您尝试重定向的控制器位于同一控制器中,只需调用操作并呈现模板,如下所示:
def show
index
render :action => "index"
end
如果不是,那么我不知道你是怎么做到的。
好的,所以我找到了解决问题的方法。我发现了很好的情况 这里。我的实现看起来像这样:
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'分配给a _method PARAM。如果你看一个正常的 put 请求它是一个 post 从一个表格 _method PARAM。所以它有点hackish但它完成了工作。
此外,您必须确保在打电话时 redirect_post 哈希值是字符串,否则会抛出错误。
我不认为你能做到这一点,我怀疑这个限制是HTTP本身的一部分。
使用时 redirect_to的 - 除非在参数中另有规定,否则重定向将作为“302 Moved”标头发生。
看一下HTTP Spec本身并没有透露任何改变浏览器通过重定向发出的请求类型的方法。
此类状态代码表示 需要采取进一步行动 由用户代理以实现 请求。需要采取行动 由用户代理执行 如果没有与用户交互 并且只有在使用的方法中 第二个请求是GET或HEAD。
我认为您可能需要使用JavaScript来实现此功能,或者可能需要重新考虑应用程序中的控制流。
如果操作与您尝试重定向的控制器位于同一控制器中,只需调用操作并呈现模板,如下所示:
def show
index
render :action => "index"
end
如果不是,那么我不知道你是怎么做到的。
好的,所以我找到了解决问题的方法。我发现了很好的情况 这里。我的实现看起来像这样:
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'分配给a _method PARAM。如果你看一个正常的 put 请求它是一个 post 从一个表格 _method PARAM。所以它有点hackish但它完成了工作。
此外,您必须确保在打电话时 redirect_post 哈希值是字符串,否则会抛出错误。
您可以重定向到从客户端发出put请求的其他页面, 使用Javascript。