레일에서 has_many 관계의 수에 대한 검증,하지만 시나리오가 여기에 약간 다릅니다 : 지금내가 다른 질문을 통해되었습니다
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
가 이미 두 문서를 가지고 그 User.find(2)
을 고려 그래서 다음을 수행 :
user.documents << Document.new(file: File.open('image.jpg', 'rb'))
성공적으로 문서를 만들고 첨부 파일의 유효성을 검사하지 않습니다 : User
. 데이터베이스에 문서가 생성 된 후 user
& Document.last
은 유효하지 않지만 어떤 용도로 작성되었는지는 이제 확인되었습니다.
런타임에 Document
개체를 만들려고하는데 그 원인이있을 수 있지만 count
대신 size
을 사용하고 있습니다. 내가 제대로 다시 굴러되지 조금 놀랐어요하지만,
validates :documents, length: { maximum: 2 }
당신은 항상 트랜잭션이 랩 수 :
self.documents.size 경우'할 경우> 2''에 self.documents.size> 한 경우 '을 선택하면 같은 사용자에 대한 세 번째 문서 작성이 중단됩니다. 'Document'가 생성되기 전에 사용자를위한 validate 메소드가 실행됩니다. – kiddorails
'validates_associated : user'를'document.rb'에 넣으려고 했습니까? – Pavan
@Pavan'validates_associated : 사용자는'Document'에서 다형성'attachable '을 위해 일하지 않을 것입니다. 'user'는 정의되지 않습니다. – kiddorails