Je suis passé par d'autres questions, mais le scénario est peu différent ici:validation pour le compte de la relation has_many dans Rails
class User < ApplicationRecord
has_many :documents, as: :attachable
validate :validate_no_of_documents
private
def validate_no_of_documents
errors.add(:documents, "count shouldn't be more than 2") if self.documents.size > 2
end
end
class Document < ApplicationRecord
belongs_to :attachable, polymorphic: true
validates_associated :attachable
end
Maintenant, considérons User.find(2)
qui a déjà deux documents, faisant ce qui suit:
user.documents << Document.new(file: File.open('image.jpg', 'rb'))
Ceci crée avec succès le document, et ne valide pas le attachable: User
. Une fois le document créé dans la base de données, les deux user
& Document.last
ne sont pas valides, mais à quoi bon ils ont été créés maintenant.
J'essaye de créer un objet Document
sur l'exécution, et cela peut être à l'origine, mais pour cela, j'utilise size
au lieu de count
dans ma validation.
si vous faites 'si self.documents.size> 2' à' si self.documents.size> 1 ', il va arrêter de créer un troisième document pour le même utilisateur. La méthode de validation pour l'utilisateur est déclenchée avant la création de 'Document'. – kiddorails
Avez-vous essayé de mettre' validates_associated: user' dans 'document.rb'? – Pavan
@Pavan 'validates_associated: user' wont 'fonctionnent dans' Document' pour' attachable 'polymorphe. 'user' sera indéfini. – kiddorails