无法在Rails 3中跳过验证?

And*_*rew 20 validation model runtime-error ruby-on-rails ruby-on-rails-3

我正在研究Rails 3中的一个项目,我需要创建一个空记录,将其保存到数据库而不进行验证(因为它是空的),然后允许用户编辑此记录以完成它,并从中进行验证然后出去.

现在我遇到了一个非常基本的问题:在任何情况下我都无法保存模型而不进行验证.

我在控制台中尝试了以下内容:

model = Model.new
model.save(false) # Returns RuntimeError: Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
model.save( :validate => false ) # Returns same error as above

model = Model.create
model.save(false) # Same runtime error
model.save( :validate => false ) # Same runtime error
Run Code Online (Sandbox Code Playgroud)

然后我尝试将模型中的所有验证更改为:on => :update.任何保存尝试都会出现相同的错误消息.

那我在这里错过了什么?如何创建空记录,然后在用户编辑时进行验证?

谢谢!

Lev*_*tix 23

通过正常用例保存无效模型是一种不好的做法.改为使用条件验证:

validates_presence_of :title, :unless => :in_first_stage?
Run Code Online (Sandbox Code Playgroud)

或者如果你有很多:

with_options :unless => :in_first_stage? do
  validates_presence_of :title
  validates_presence_of :author
end
Run Code Online (Sandbox Code Playgroud)

这样,夜间完整性测试就没有任何障碍,它会检查所有记录的有效性.

用于保存而不进行验证的有效用例将用于测试边缘情况,例如测试是否强制执行数据库约束.


And*_*rew 14

*叹...*

发现问题...我的一个after_validate方法调用是添加信息并重新保存模型,因此我得到的错误不是来自控制台输入,它们来自after_validate方法,它再次保存.

谢谢大家.