58 votes

Ruby on Rails: des erreurs.add_to_base contre les erreurs.ajouter

J'ai lu que des erreurs.add_to_base devraient être utilisés pour les erreurs associées à l'objet et non pas un attribut spécifique. J'ai du mal à conceptualiser ce que cela signifie. Quelqu'un pourrait-il donner un exemple, quand je veux utiliser chaque?

Par exemple, j'ai une Bande de modèle et de chaque Bande est un Genre. Quand j'ai valider la présence d'un genre, si le genre est manquant si l'erreur d'être ajouté à la base?

Le plus d'exemples les mieux

Merci!!!!

118voto

GSP Points 1824

Il est intéressant de noter (car ce qu'on voit dans les moteurs de recherche, qui est de savoir comment je l'ai trouvé) que c'est déconseillé. Les Rails de 3 façon 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

40voto

MarkusQ Points 15612

Un manque genre serait un champ d'erreur. Une erreur de base serait quelque chose comme une copie exacte d'un enregistrement existant, où le problème n'était pas lié à un domaine spécifique, mais plutôt à l'ensemble du dossier (ou au moins à une combinaison de champs).

35voto

Jon Kern Points 796

Dans cet exemple, vous pouvez voir de validation sur le terrain (équipe doit être choisi). Et vous pouvez voir une classe/niveau de la base de validation. 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X