Rails ActiveRecordのone_to_many関係でカスケード削除を行うにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1402861

質問

私はone_to_many関係を持つモデルをRailsに持っています。父親を削除するときは、すべての子供を削除したいと思います。どうすればいいですか?ユーザーを削除するときにすべての注文とそのアイテムを削除したい

私のモデルは:

class User < ActiveRecord::Base
  has_many :orders, :foreign_key => "id_user"
end

class Order < ActiveRecord::Base
  has_many :order_items, :foreign_key => "id_pedido"
  belongs_to :user, :foreign_key => "id_usuer"
end

class OrderItem < ActiveRecord::Base
  belongs_to :order, :foreign_key => "id_pedido"
end
役に立ちましたか?

解決

jdlの答えは正しいです-:dependent =&gt;を追加する必要があります。 :destroy を両方の関係に追加します。つまり、 User クラスで has_many:orders に追加し、 Order クラスで、 has_many:order_items に追加します。

外部キーに対するMySQLの動作を変更することもできます。おそらく、それらを ON DELETE CASCADE に設定します。

他のヒント

探しているのは:dependent =&gt;です。 has_many の:destroy オプション。

has_many docs

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top