嗨,我想将xml数据发布到服务器并根据响应重定向页面。为此,在我的控制器中,我有我的操作和send_xml方法。
拼音版本:2.0.0-p247
导轨版本:3.2.17
def new
@sales = current_user.sales.new
respond_with(@sales)
end
def fail
flash[:error] = 'Canceled'
render :new
end
def success
result = send_xml(params)
if result['Response'] == 'Approved'
flash[:success] = 'Approved'
redirect_to(approved_path)
return
else
flash[:error] = 'Failed'
redirect_to(failed_path)
return
end
end
private
def send_xml(params)
request = "DATA=<?xml version="1.0" encoding="ISO-8859-9"?><myData>Foo</myData>"
uri = URI.parse('http://foobar.com')
xml = render xml: request
response = Net::HTTP.post_form(uri, xml)
response = Hash.from_xml(response.body)
response['myResponse']
end
当我尝试运行此操作时,出现如下错误:
AbstractController::DoubleRenderError
Render and/or redirect were called multiple times in this action. Please note that you
may only call render OR redirect, and at most once per action. Also note that neither
redirect nor render terminate execution of the action, so if you want to exit an action
after redirecting, you need to do something like "redirect_to(...) and return".
我猜 NET::HTTP.post_form 方法触发器呈现或重定向会导致此错误。
我怎样才能摆脱这个错误。
感谢您的帮助
发生这种情况是因为您正在从#success
调用#send_xml
调用render xml: request
,因此您正在调用render
和redirect
,这会导致异常(如消息也所示)。