早上好,
试图找到避免目前情况的最佳方法我就是这样...... 我有一个A班 它具有以下属性a,b,c,d
当在A上调用create时,我首先检查A的实例是否存在,其中包含以下参数a,b,c。
现在,我用来检查数据库并在必要时创建的行
@foo = A.where(:a => params[:A][:a], :b => params[:A][:b],:c => params[:A][:c]).first_or_create!
A类对a,b,c
具有以下验证a's length > 3 & < 15
b must be true (checkbox must be checked)
c's length >50 & < 500
当用户传入空白表单时,我将收到上述行生成的错误。 我知道这是由控制器试图创建一个不符合验证的对象A引起的。
使用begin rescue end
或错误检查pre-first_or_create是最好的方法! ?
答案 0 :(得分:1)
从您的两个选项中begin rescue end
更好,因此您不会重复模型中已有的代码。
另一种选择是使用没有感叹号的first_or_create
,因此您的代码不会引发错误,然后您可以在视图中显示错误。我想这相当于begin rescue end
,因为您可以在救援部分的视图中显示显示错误。