【问题标题】:Executing custom validation before record created?在创建记录之前执行自定义验证?
【发布时间】:2010-06-19 23:11:25
【问题描述】:

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

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

before_validation_on_create :custom_validation

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

【问题讨论】:

  • 我看到有:validate_on_create。

标签: ruby-on-rails validation


【解决方案1】:

在轨道 3 中

before_validation_on_create :do_something

已替换为:

before_validation :do_something, :on => :create

【讨论】:

  • 我不认为这解决了在创建之前运行自定义验证的问题,但它回答了我来到这里的问题。
【解决方案2】:

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

【讨论】:

  • 我特别喜欢你的例子。
  • 这个例子让我像办公室里的小女孩一样咯咯笑
  • 很高兴你喜欢它!我忘了这是我 5 年前写的。为了记录,小男孩也可以咯咯笑。
【解决方案3】:

以下在 Rails 5 中对我有用:

validate :custom_validation_method, :on => :create

跑步

validate :custom_validation_method, :before => :create

给了我以下错误:

Unknown key: :before. Valid keys are: :on, :if, :unless, :prepend.

【讨论】:

    【解决方案4】:

    这里有一个很好的资源,可获取有关回调及其发生顺序的信息:

    http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

    【讨论】:

    • 为什么这被否决了?它指出了描述 OP 问题解决方案的非常清晰的文档,以及对一般验证的更好理解。
    • 它被否决了,因为它不是一个答案,它只是一个外部参考的链接。
    猜你喜欢
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2016-11-04
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多