Ruby on Rails:errors.add_to_base与errors.add

我已经读过errors.add_to_base应该用于与对象关联的错误,而不是特定的属性。 我在概念化这意味着什么方面遇到了麻烦。 有人可以提供一个示例说明我何时要使用它们吗?

例如,我有一个Band模型,每个Band都有一个流派。 当我验证某类型的存在时,如果缺少该类型,是否应将错误添加到基础中?

例子越多越好

谢谢!

Tony asked 2020-02-13T05:34:56Z
3个解决方案
105 votes

值得注意的是(因为这是在搜索引擎中显示的,这是我找到它的方式),因此已弃用该方法。 Rails 3的实现方式是:

errors[:base] << "Error message"    

要么

errors.add(:base, "Error message")

[http://apidock.com/rails/ActiveRecord/Errors/add_to_base]
[http://apidock.com/rails/v3.2.8/ActiveModel/Errors/add]

GSP answered 2020-02-13T05:35:44Z
38 votes

流派丢失将是字段错误。 基本错误将类似于现有记录的精确副本,其中问题不与任何特定字段有关,而与整个记录有关(或至少与字段的某种组合有关)。

MarkusQ answered 2020-02-13T05:35:11Z
33 votes

在此示例中,您可以看到字段验证(必须选择团队)。 您会看到类/基础级别的验证。 例如,您需要至少一种联系方式,电话或电子邮件:

class Registrant
  include MongoMapper::Document

  # Attributes ::::::::::::::::::::::::::::::::::::::::::::::::::::::
  key :name, String, :required => true
  key :email, String
  key :phone, String

  # Associations :::::::::::::::::::::::::::::::::::::::::::::::::::::
  key :team_id, ObjectId
  belongs_to :team
...
  # Validations :::::::::::::::::::::::::::::::::::::::::::::::::::::
  validate :validate_team_selection
  validate :validate_contact_method
...

  private

  def validate_contact_method
    # one or the other must be provided
    if phone.empty? and email.empty?
      errors.add_to_base("At least one form of contact must be entered: phone or email" )
    end
  end

  def validate_team_selection
    if registration_setup.require_team_at_signup
      if team_id.nil?
        errors.add(:team, "must be selected" )
      end
    end
  end
end
Jon Kern answered 2020-02-13T05:36:04Z
translate from https://stackoverflow.com:/questions/706533/ruby-on-rails-errors-add-to-base-vs-errors-add