ich durch andere Fragen gewesen sein, aber das Szenario ist etwas anders hier:Validierung für die Zählung von has_many Beziehung in 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
Nun User.find(2)
berücksichtigen, dass bereits zwei Dokumente hat, dabei die folgende:
user.documents << Document.new(file: File.open('image.jpg', 'rb'))
Dies erstellt erfolgreich das Dokument und validiert nicht die anfügbar: User
. Nachdem das Dokument in der Datenbank erstellt wurde, sind beide user
& Document.last
ungültig, aber welche Verwendung, sie wurden jetzt erstellt.
Ich versuche, ein Document
Objekt zur Laufzeit zu erstellen, und das kann verursachen, aber zu diesem Zweck verwende ich size
anstelle von count
in meiner Validierung.
, wenn Sie 'wenn self.documents.size machen> 2' zu' wenn self.documents.size> 1 ', es wird aufhören, ein drittes Dokument für denselben Benutzer zu erstellen. Die Validierungsmethode für den Benutzer wird ausgelöst, bevor das Dokument erstellt wird – kiddorails
Haben Sie versucht, 'validates_associated: user' in' document.rb' zu setzen? – Pavan
@Pavan 'validates_associated: Benutzer' arbeitet nicht in 'Document' für polymorphe' Attachable'. 'user' ist nicht definiert. – kiddorails