在javaeye上边看到了一个帖子,一个哥们儿(http://liuqiang.javaeye.com/) 提出了:如何同时提交多个model并且“失败全不存,成功全存”,其实就是典型的transaction场景,并且给出了几个解决方案,最后作者给出了其认为最好的一个解决方法,其核心代码就是通过:unless [@user, @city, @order].map(&:valid?).include?(false) 的语句判断三个模型是否都通过验证,没有的话返回。

怎么说呢,这个方法应该说还是不错的,看上去比较简洁。但是看到的第一眼就感觉有点不对劲:为什么不用transaction? 呵呵,跟帖中马上有人有同样的意见,不过他给出的解决方案确实和我所想想的不一样,是更优雅,看到的第一眼就想到了2年前使用spring的transaction方法,同时也让用了快两年rails的我知道了 around_filter原来是这么用的,呵呵,张见识。代码已经记录下来了,在这里