我有一个包含 3 个 ActiveRecord 字段的表单。其中一个领域有一种愚蠢的和状态相关的验证要求。(例如,如果对象是在设置向导表单上创建的,我只验证该字段。)
在我创建对象的 POST 处理程序中,我想我可以调用 errors.add 来插入一个特殊的错误条件
@foo = Foo.new(params[:foo])
if goofy_conditions(params[:foo][:goofy_field])
@foo.errors.add(:goofy_field, "doesn't meet the goofy conditions" )
end
respond_to do |format|
if @foo.save
...
else
... redirect back to form (with error fields hilited)
但是,在控制器中执行 @foo.errors.add() 似乎没有做任何事情......如果其他字段通过验证,它不会阻止 save() 。
另一种方法是将自定义验证处理程序放入模型中...我知道使用 errors.add(:field, 'msg') 在那里可以正常工作...但是在这种情况下,我的控制器如何将信息“传递”给验证器告诉它是否需要验证该字段。