has_and_belongs_to_manyのdependent destroyの挙動について

f:id:ihatov08:20160809101914j:plain

railsのアソシエーションで中間テーブルは持つが、中間モデルはもたないhas_and_belongs_to_many関連付けがあります。

この関連付けでdependent: :destroyオプションをつけた際は、中間テーブルのレコードが削除される挙動でした。

関連付け名は中間テーブルではないのであまり直感的ではないですが、上記挙動をとるようです。

class ChefFood < ApplicationRecord
has_and_belongs_to_many :tags, dependent: :destroy
class Tag < ApplicationRecord
has_and_belongs_to_many :chef_foods
end

tagは削除されない↓

[13] pry(main)> ChefFood.first.destroy
ChefFood Load (0.4ms)  SELECT  `chef_foods`.* FROM `chef_foods` ORDER BY `chef_foods`.`id` ASC LIMIT 1
(0.3ms)  BEGIN
ChefFoodImage Load (0.5ms)  SELECT `chef_food_images`.* FROM `chef_food_images` WHERE `chef_food_images`.`chef_food_id` = 2
SQL (0.9ms)  DELETE FROM `chef_food_images` WHERE `chef_food_images`.`id` = 3
SQL (0.7ms)  DELETE FROM `chef_food_images` WHERE `chef_food_images`.`id` = 4
ChefFoodAvailableDay Load (0.6ms)  SELECT `chef_food_available_days`.* FROM `chef_food_available_days` WHERE `chef_food_available_days`.`chef_food_id` = 2
SQL (0.6ms)  DELETE FROM `chef_food_available_days` WHERE `chef_food_available_days`.`id` = 3
SQL (0.5ms)  DELETE FROM `chef_food_available_days` WHERE `chef_food_available_days`.`id` = 4
SQL (0.6ms)  DELETE FROM `chef_foods_tags` WHERE `chef_foods_tags`.`chef_food_id` = 2
SQL (0.5ms)  DELETE FROM `chef_foods` WHERE `chef_foods`.`id` = 2

1 個のコメント

  • 難しい事はよくわかりませんが、上の写真に見せられました。
    美味しそうなコーヒーが周りの暗い色により一層美味しそうに見えて・・
    コーヒー大好きな私にとってこの写真は
    たまりません。

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA