在Rails中调用自定义validation方法
我刚刚升级到2.3.4我的轨道,我注意到这与validation:让我说我有一个简单的模型公司有一个名字。 没有什么。 我想运行我自己的validation:
class Company < ActiveRecord::Base validate :something def something false end end
在这种情况下保存模型实际工作。 同样的事情发生,如果我重写validate()并返回false。 我注意到这在一个更复杂的模型中,我的validation返回false,但对象仍然保存…我尝试了一个基本上是空的模型,并应用相同的东西。 我错过了一个新的练习吗? 这在我的一些旧的rails代码中似乎不是这种情况。
您使用validate
方法时执行validate
。 不过,轨道不依赖于返回的值。
它依赖于是否有validation错误。 所以你应该添加错误,当你的模型不validation。
def something errors.add(:field, 'error message') end
或者,如果错误与字段无关:
def something errors.add(:base, 'error message') end
那么你的模型将不会被保存,因为有错误。
你在validation和callback之间感到困惑。
如果对象上有任何错误,validation应该失败,validation返回无关紧要。 callback失败,如果他们返回false,无论他们添加任何错误的对象。
Rails使用调用有效? 从保存调用不检查任何validation的结果。
编辑: Rails对待validate :method
作为callback,但有效? 仍然不检查他们的结果,只是为了添加到对象的错误。
我不认为这种行为完全改变,但我可能是错的。 我不认为我曾经写过validation返回false。
只是FYI errors.add_to_base('error message')
已被弃用在轨道3,被取代
errors[:base] << "Error message"
要么
errors.add(:base, "Error message")
- Kohana 3:validation模型的例子
- 在WPFvalidation中ValidatesOnNotifyDataErrors和ValidatesOnDataErrors和NotifyOnValidationError有什么区别?
- 如何validationRuby on Rails中一对id的唯一性?
- 如何在Web API 2中存储服务器端的持票人代币?
- 邮政编码(美国邮政编码)validation
- validationJavaScript中的十进制数 – IsNumeric()
- WinForm UIvalidation
- accepted_nested_attributes_for儿童关联validation失败
- 在C#中检查文件名是*可能*有效(不是它存在)