J'ai lu que errors.add_to_base devrait être utilisé pour les erreurs associées à l'objet et non à un attribut spécifique. J'ai du mal à conceptualiser ce que cela signifie. Est-ce que quelqu'un pourrait fournir un exemple de quand je voudrais utiliser chacun?
Par exemple, j'ai un modèle de groupe et chaque groupe a un genre. Lorsque je valide la présence d'un genre, si le genre manque, faut-il ajouter l'erreur à la base?
Plus il y a d'exemples, mieux c'est
Je vous remercie!
Un genre manquant serait une erreur de champ. Une erreur de base serait quelque chose comme un double exact d'un enregistrement existant, où le problème n'était pas lié à un champ spécifique mais plutôt à l'enregistrement dans son ensemble (ou au moins à une combinaison de champs).
Il convient de noter (car cela apparaît dans les moteurs de recherche, c'est ainsi que je l'ai trouvé) que cela est obsolète. La manière Rails 3 de le faire est:
errors[:base] << "Error message"
ou
errors.add(:base, "Error message")
http://apidock.com/Rails/ActiveRecord/Errors/add_to_base
http://apidock.com/Rails/v3.2.8/ActiveModel/Errors/add
Dans cet exemple, vous pouvez voir la validation du champ (l'équipe doit être choisie). Et vous pouvez voir une validation de niveau classe/base. Par exemple, vous avez besoin d'au moins une méthode de contact, un téléphone ou un e-mail:
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