first_or_create在创建具有无效参数的对象时导致问题

时间:2013-06-26 12:50:39

标签: ruby-on-rails ruby ruby-on-rails-3

早上好,

试图找到避免目前情况的最佳方法我就是这样...... 我有一个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是最好的方法! ?

1 个答案:

答案 0 :(得分:1)

从您的两个选项中begin rescue end更好,因此您不会重复模型中已有的代码。

另一种选择是使用没有感叹号的first_or_create,因此您的代码不会引发错误,然后您可以在视图中显示错误。我想这相当于begin rescue end,因为您可以在救援部分的视图中显示显示错误。