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?
Réponses
Trop de publicités?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.
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.