我有2个模型,order
和owner
,它们使用order_owner
关联通过has_many through
模型连接在一起。每个order
必须至少与owner
相关联,但由于每个order
或owner
都可以包含其他许多内容,因此需要多对多关系。
我已经使用order
设置了我的validates :owners, presence: true
模型,如果我尝试创建order
而不将任何owners
与之关联,那么效果很好。但是,我遇到的问题是,无论在创建时通过嵌套属性关联owner
,验证仍然失败,我不知道如何修复它。
模型 - Rails 5.0.2
##order.rb
has_many :order_owners, inverse_of: :order, dependent: :destroy
has_many :owners, through: :order_owners
accepts_nested_attributes_for :owners, reject_if: :all_blank, allow_destroy: true
accepts_nested_attributes_for :order_owners, reject_if: :all_blank, allow_destroy: true
validates :owners, presence: true
##owner.rb
has_many :order_owners, inverse_of: :owner, dependent: :destroy
has_many :orders, through: :order_owners
##order_owner.rb
belongs_to :owner
belongs_to :order
accepts_nested_attributes_for :owner
我尝试过使用
等自定义验证方法validate :must_have_owner
...
def must_have_owner
if owners.empty? or owners.all? { |owner| owner.marked_for_destruction? }
errors.add(:base, 'Order must have at least one owner')
end
end
但同样的事情发生了。
我在创建时将owners
与order
相关联的方式是通过嵌套属性并使用Cocoon gem
。因此,用户填写order
表单,然后添加相应的owners
(通过Owners.all
选择或添加要创建的新owner
,然后提交表单。如果没有上述验证,整个过程工作正常,但它也允许在没有order
的情况下创建owner
,从而破坏了目的。
任何想法都会有所帮助,谢谢!