0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【rails】一つのモデルを編集や削除 その子、孫のテーブルを書き換える

Posted at

## やりたいこと
①編集画面で親要素と一緒に子、孫を同時に書き換えたかった
②削除で孫まで同時に消したかった

## 原因と解決策
①編集画面で親要素と一緒に子、孫を同時に書き換えたかった
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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?