111 votes

Rails - Valider La Présence De L'Association?

J'ai un modèle Un qui a une "has_many" association à un autre modèle de B. j'ai une exigence de l'entreprise que d'une insertion dans Une nécessite au moins 1 enregistrement associé à B. Est-il une méthode pour que je puisse appeler pour vérifier que c'est vrai, ou dois-je écrire une validation personnalisée?

174voto

fl00r Points 41855

Vous pouvez utiliser validates_presence_of http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates_presence_of

class A < AR::Base
  has_many :bs
  validates_presence_of :bs
end

ou juste validates http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates

class A < AR::Base
  has_many :bs
  validates :bs, :presence => true
end

Mais il y a un bug avec elle si vous utilisez accepts_nested_attributes_for avec :allow_destroy => true: modèles Imbriqués et parent de validation. Dans cette rubrique, vous pouvez trouver de solution.

6voto

Spyros Points 13741

Vous pouvez valider des associations avec d' validates_existence_of (ce qui est un plugin):

Exemple extrait de cette entrée de blog:

class Tagging < ActiveRecord::Base
  belongs_to :tag
  belongs_to :taggable, :polymorphic => true
  validates_existence_of :tag, :taggable

  belongs_to :user
  validates_existence_of :user, :allow_nil => true
end

Alternativement, vous pouvez utiliser validates_associated. Comme Faisal notes dans les commentaires ci-dessous la réponse, validates_associated vérifie si l'objet associé est valide en cours d'exécution de la classe associée à des validations. Il n'a pas à vérifier la présence. Il est également important de noter qu'un néant de l'association est considérée comme valide.

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