Rails 如何在大事务的方法后,同时显示 validation 或其他错误

jock · 2012年12月12日 · 最后由 Rei 回复于 2012年12月12日 · 2276 次阅读

比如

XXController 有某个 action

def create

Model.some_method(params)

if ??? redirect 'xxx' else render 'new' end

end

问题是 Model 的 some_method 实现很复杂,涉及到多个模型,在一个大事务之中

那么,controller 最后那部分是做 redirect 还是现在当前页面,依靠什么判断?

另外,如果回滚了或者业务异常了,我如何在当前页面显示出什么错了,而不是直接出现一个 500 错误页面

捕捉一下异常不行吗?

当前页面显示的错误仅限于: 数据输入未通过验证。 其他一切在事务中的错误信息属于系统级 log 错误,出于对用户体验性的友好,不应该显示给用户,500 即可。 所以,楼主的办法请酌情自理。

#2 楼 @winnie 谢谢,明白了这个原则。

另外,我想问下,能否主动触发 validation 吗,而不是一定要持久化的时候

errors.add_to_base("You must specify a name or an email address") 然后判断 errors.counts 也可以。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号