## やりたいこと
①編集画面で親要素と一緒に子、孫を同時に書き換えたかった
②削除で孫まで同時に消したかった
## 原因と解決策
①編集画面で親要素と一緒に子、孫を同時に書き換えたかった
updateアクションで親要素しかupdateできていなかったため。
しかし孫まで同時に編集アップデートの方法がわからなかった。一旦断念。
②削除で孫まで同時に消したかった
親子孫を繋ぐ記述でdependent: :destroyが抜けていた。
これを書くことで親が削除された時同時に子要素を削除できる。
has_many :menus, dependent: :destroy
## ①を力技で解決
変更前
events_controller.rb
def update
respond_to do |format|
if @event.update(event_params)
format.html { redirect_to @event, notice: '記録の変更完了' }
format.json { render :show, status: :ok, location: @event }
else
format.html { render :edit }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
変更後
events_controller.rb
def update
@event.destroy
new
@event = Event.new(event_params)
respond_to do |format|
if @event.save(event_params)
format.html { redirect_to @event, notice: '記録の変更完了' }
format.json { render :show, status: :ok, location: @event }
else
format.html { render :edit }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
変更後では孫要素まで根こそぎ削除し、新たに作り直すという手法を使いました。
あまりスマートではないですが、見え方は直りました。
もっといいやり方があればご教授頂きたく存じます。
##参考文献
https://qiita.com/Tsh-43879562/items/fbc968453a7063776637