本投稿の目的
・Railsについての議事録です。学習に使った教材
Udemyの以下2つの教材を参考にまとめました。 ・["はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう"](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/) ・["フルスタックエンジニアが教える 即戦力Railsエンジニア養成講座"](https://www.udemy.com/course/rails-kj/)○dependent の設定
・1対多のmodelの関係において,model(1)のcolumnが消去されると,そのcolumnに紐づくmodel(多)のcolumnは必要なくなる ・これを自動的に消去してくれる設定であるdependentには以下2つがある ・どちらもmodel(1)ファイルに対して記述を追加する○dependent: :delete_all
model(1).rb
class model(1) < ApplicationRecord
has_many :model(多), dependent: :delete_all
end
・model1の削除=紐付けデータも同時削除 になる
・親が削除されると子たちは自動で消される
・例):親であるquestionのcolumn情報が削除されると,それに紐づいたanswer のcolumn情報も一緒に削除される
○dependent: :destroy
model(1).rb
class model(1) < ApplicationRecord
has_many :model(多), dependent: :destroy
end
・delete_all
と同じ処理がされるが,オブジェクトを1つずつ消していく
・パフォーマンスはdelete_all
に比べて低い
・紐付けが2階層以上ある場合は,こちらを使用しないとできないことがある
*(基本的に1階層の時は,delete_all
を使用する)
○dependentの有効範囲
・紐づけ自動削除機能は,destroyアクション時のみ有効
・controllerのdeleteメソッドをdestroyメソッドに変更しておく必要がある