Подтвердить что ты не робот

Ruby on Rails: errors.add_to_base vs. errors.add

Я читал, что errors.add_to_base следует использовать для ошибок, связанных с объектом, а не с определенным атрибутом. У меня возникли проблемы с концептуализацией того, что это значит. Может ли кто-нибудь представить пример того, когда я хочу использовать каждый?

Например, у меня есть модель Band, и у каждой группы есть жанр. Когда я проверяю наличие жанра, если жанр отсутствует, если ошибка добавляется в базу?

Чем больше примеров, тем лучше

Спасибо!

4b9b3361

Ответ 1

Отсутствующий жанр будет полевой ошибкой. Базовая ошибка будет похожа на точный дубликат существующей записи, где проблема не была привязана к какому-либо определенному полю, а скорее к записи в целом (или не к некоторой комбинации полей).

Ответ 3

В этом примере вы можете увидеть проверку поля (команда должна быть выбрана). И вы можете увидеть проверку уровня класса/базового уровня. Например, вам нужен хотя бы один способ контакта, телефон или адрес электронной почты:

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