在创建记录之前执行自定义验证?

时间:2010-06-19 23:11:25

标签: ruby-on-rails validation

我想在创建记录之前执行自定义验证吗?

看起来这是正确的方法:before_validation_on_create。例如:

before_validation_on_create :custom_validation

但我不确定。任何帮助将不胜感激。

4 个答案:

答案 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