使用has_many通过验证模型创建失败

时间:2018-02-19 20:22:41

标签: ruby-on-rails validation associations ruby-on-rails-5 has-many-through

我有2个模型,orderowner,它们使用order_owner关联通过has_many through模型连接在一起。每个order必须至少与owner相关联,但由于每个orderowner都可以包含其他许多内容,因此需要多对多关系。

我已经使用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

但同样的事情发生了。

我在创建时将ownersorder相关联的方式是通过嵌套属性并使用Cocoon gem。因此,用户填写order表单,然后添加相应的owners(通过Owners.all选择或添加要创建的新owner,然后提交表单。如果没有上述验证,整个过程工作正常,但它也允许在没有order的情况下创建owner,从而破坏了目的。

任何想法都会有所帮助,谢谢!

0 个答案:

没有答案
相关问题