【发布时间】:2014-03-22 23:04:40
【问题描述】:
我有一个更新方法,它使用具有自己的渲染调用的保存和删除方法。下面是代码:
更新方法:
def update_book
self.delete_book
params[:Name] = params[:NewName]
self.save_book
end
删除方法:
def delete_book
# Do something
rescue BookDoesNotExist => exception
render status: 404
return
end
head 200
end
保存方法:
def save_book
# Do something
rescue BookDoesNotExist => exception
render status: 404
return
end
rescue BookAlreadyExist => exception
render status: 409
return
end
head 200
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”
我理解这是因为在删除和保存方法中都使用我传递的输入引发异常。我该如何处理这种情况?
做了一些研究,我了解到我需要使用重定向。所以我明白当我的删除方法抛出异常/渲染时,我应该返回并且不应该调用保存方法。
这是我尝试使用 redirect_to 的方法:
更新方法:
def update_book
redirect_to action: self.delete_book and return if status=404 end
params[:Name] = params[:NewName]
self.save_book
end
我做得对还是有其他最好的方法来处理重定向?
【问题讨论】:
标签: ruby-on-rails ruby