cgr*_*cgr 60 validation ruby-on-rails
我刚刚将我的轨道升级到2.3.4并且我注意到了这一点:验证:我说我有一个简单的模型公司,它有一个名字.什么都没有.我想运行自己的验证:
class Company < ActiveRecord::Base
validate :something
def something
false
end
end
Run Code Online (Sandbox Code Playgroud)
保存模型实际上适用于这种情况.如果我覆盖validate()并返回false,则会发生同样的事情.我在一个更复杂的模型中注意到这一点,我的验证返回false,但是对象仍在保存...我在一个基本上空的模型中尝试了它并应用了相同的东西.我缺少一种新的做法吗?在我的一些较旧的rails代码中似乎并非如此.
Dam*_*IEU 110
使用该validate方法时将执行验证.但是rails不依赖于返回的值.
它依赖于是否存在验证错误.因此,您应该在模型未验证时添加错误.
def something
errors.add(:field, 'error message')
end
Run Code Online (Sandbox Code Playgroud)
或者,如果错误与字段无关:
def something
errors.add(:base, 'error message')
end
Run Code Online (Sandbox Code Playgroud)
然后您的模型将无法保存,因为存在错误.
EmF*_*mFi 15
你在验证和回调之间感到困惑.
如果对象上有任何错误,则验证应该失败,无论验证返回什么都无关紧要.如果返回false,则回调失败,无论它们是否向对象添加任何错误.
Rails使用有效的呼叫?来自保存调用,不会检查任何验证的结果.
编辑: Rails视为validate :method回调,但有效吗?仍然不检查他们的结果,只检查他们添加到对象的错误.
我认为这种行为根本没有改变,但我可能是错的.我认为我之前没有写过验证来返回false.
仅仅是FYI errors.add_to_base('error message')在rails 3中被弃用并被替换为
errors[:base] << "Error message"
Run Code Online (Sandbox Code Playgroud)
要么
errors.add(:base, "Error message")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38956 次 |
| 最近记录: |