Ответ 1
Отсутствующий жанр будет полевой ошибкой. Базовая ошибка будет похожа на точный дубликат существующей записи, где проблема не была привязана к какому-либо определенному полю, а скорее к записи в целом (или не к некоторой комбинации полей).
Я читал, что errors.add_to_base следует использовать для ошибок, связанных с объектом, а не с определенным атрибутом. У меня возникли проблемы с концептуализацией того, что это значит. Может ли кто-нибудь представить пример того, когда я хочу использовать каждый?
Например, у меня есть модель Band, и у каждой группы есть жанр. Когда я проверяю наличие жанра, если жанр отсутствует, если ошибка добавляется в базу?
Чем больше примеров, тем лучше
Спасибо!
Отсутствующий жанр будет полевой ошибкой. Базовая ошибка будет похожа на точный дубликат существующей записи, где проблема не была привязана к какому-либо определенному полю, а скорее к записи в целом (или не к некоторой комбинации полей).
Стоит отметить (поскольку это обнаруживается в поисковых системах, как я его нашел), что это устарело. Способ 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
В этом примере вы можете увидеть проверку поля (команда должна быть выбрана). И вы можете увидеть проверку уровня класса/базового уровня. Например, вам нужен хотя бы один способ контакта, телефон или адрес электронной почты:
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