【发布时间】:2010-06-19 23:11:25
【问题描述】:
我想在创建记录之前执行自定义验证?
看起来这是正确的方法:before_validation_on_create。例如:
before_validation_on_create :custom_validation
但我不确定。任何帮助将不胜感激。
【问题讨论】:
-
我看到有:validate_on_create。
我想在创建记录之前执行自定义验证?
看起来这是正确的方法:before_validation_on_create。例如:
before_validation_on_create :custom_validation
但我不确定。任何帮助将不胜感激。
【问题讨论】:
在轨道 3 中
before_validation_on_create :do_something
已替换为:
before_validation :do_something, :on => :create
【讨论】:
before_validation_on_create 钩子发生在创建验证之前……但它们本身并不是验证。
您可能想要做的是使用validate 和一个添加到错误数组的私有方法。像这样:
class IceCreamCone
validate :ensure_ice_cream_is_not_melted, :before => :create
private
def ensure_ice_cream_is_not_melted
if ice_cream.melted?
errors.add(:ice_cream, 'is melted.')
end
end
end
【讨论】:
以下在 Rails 5 中对我有用:
validate :custom_validation_method, :on => :create
跑步
validate :custom_validation_method, :before => :create
给了我以下错误:
Unknown key: :before. Valid keys are: :on, :if, :unless, :prepend.
【讨论】:
这里有一个很好的资源,可获取有关回调及其发生顺序的信息:
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
【讨论】: