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

0

ActiveRecord は、私が使用した他の ORM とは異なり、片側の belongs_to 関連付けをサポートしていないことがわかりました。ただし、次のように自分でハックできます。

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 に答える