我想在创建记录之前执行自定义验证吗?
看起来这是正确的方法:before_validation_on_create。例如:
before_validation_on_create :custom_validation
但我不确定。任何帮助将不胜感激。
答案 0 :(得分:32)
在rails 3中
before_validation_on_create :do_something
已替换为:
before_validation :do_something, :on => :create
答案 1 :(得分:19)
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
答案 2 :(得分:7)
以下在Rails 5中为我工作:
validate :custom_validation_method, :on => :create
运行
validate :custom_validation_method, :before => :create
给了我以下错误:
Unknown key: :before. Valid keys are: :on, :if, :unless, :prepend.
答案 3 :(得分:1)
这里有一个很好的资源,可以获得有关回调及其发生顺序的信息:
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html