Techioz Blog

この場合、正しい構文はどれですか?

概要

destroy_order_payment_detail というこの関数があり、依存オブジェクトを破棄しようとしています。機能しないのですが、正しい構文はどれですか?

has_one :order_payment_detail, inverse_of: :payment_order
accepts_nested_attributes_for :order_payment_detail, allow_destroy: true

before_destroy :destroy_order_payment_detail

private
    def destroy_order_payment_detail
      if :order_payment_detail.present?
        :order_payment_detail.destroy
      end
    end

またはこれは :? なしです。

private
    def destroy_order_payment_detail
      if order_payment_detail.present?
        order_payment_detail.destroy
      end
    end

解決策

依存する order_payment_detail を破棄したい場合は、コールバックを記述するよりも良い方法があり、単に次のように依存関係を宣言します。

has_one :order_payment_detail, inverse_of: :payment_order, dependent: :destroy

before_destroy コールバックは必要ありません