1

我有一个模型:

class Merchant < ActiveRecord::Base
    belongs_to :billing_address, class_name: Address, dependent: :destroy
    belongs_to :other_address1, class_name: Address, dependent: :destroy
    belongs_to :other_address2, class_name: Address, dependent: :destroy
    belongs_to :other_address3, class_name: Address, dependent: :destroy
    belongs_to :other_address4, class_name: Address, dependent: :destroy
    ...
end

Address没有关联。

当我这样做时:

merchant.billing_address.destroy

在数据库中,地址记录消失了,但merchants.billing_address_id保留了一个虚假值。这是mysql,所以没有参照完整性。

我究竟做错了什么?

注意:我意识到这可能更好地建模为has_one关联。我可能不得不去那里,但我不想去。

更新:添加了更多代码以显示多个地址关联。

4

2 回答 2

2

如果您希望在销毁帐单地址后,merchant.billing_address 为 null,则需要:dependent => :nullify在 Address 模型中使用。

参考http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

于 2014-03-06T17:31:29.523 回答
0

事实证明,ActiveRecord 不支持片面的 belongs_to 关联,这与我使用过的其他 ORM 不同。但是您可以像这样自己破解它:

before_save :remove_ids_for_nil_associations

def remove_ids_for_nil_associations
  self.billing_address_id = nil if is_getting_destroyed? self.billing_address
  ...
end

def is_getting_destroyed?(ref)
  ref.present? && ref.destroyed?
end
于 2012-10-12T16:06:09.013 回答