我遇到了其他问题,但这里的情况略有不同:
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
和&amp; Document.last
无效,但有什么用途,现在已经创建了。
我尝试在运行时创建一个Document
对象,这可能会导致它,但为此目的,我使用的是size
而不是{{} 1}}在我的验证中。
答案 0 :(得分:2)
cluster.setContactPoints(<cassandra_server_ip>);
再次在这里营救。
inverse_of
执行user = User.find(1) # This user has already 2 associated documents.
不会更改用户关联文档的计数,除非实际创建文档,并且因为在创建第三个文档时计数将保持为2,所以Rails赢得了#3;停止创建与用户关联的第三个文档,从而扼杀了验证的目的。
以下是我的所作所为:
user.documents << Document.new(file: file)
相关文章:https://robots.thoughtbot.com/accepts-nested-attributes-for-with-has-many-through
答案 1 :(得分:0)
您可以使用标准验证,而不是自定义验证:
validates :documents, length: { maximum: 2 }
你总是可以将它包装在一个事务中,虽然我有点意外的是,如果它没有最终有效,它就不能正确地回滚Document。