Ruby on Rails: errors.add_to_base против errors.add - PullRequest
47 голосов
/ 01 апреля 2009

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

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

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

Спасибо!

Ответы [ 3 ]

104 голосов
/ 06 декабря 2012

Стоит отметить (так как это обнаруживается в поисковых системах, что я и нашел), что это устарело. 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

37 голосов
/ 01 апреля 2009

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

32 голосов
/ 01 ноября 2010

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...