【Rails】accepts_nested_attributes_forで関連テーブルをAjaxで一括登録する方法

【Rails】accepts_nested_attributes_forで関連テーブルをAjaxで一括登録する方法

2019年4月20日
Rails

Ruby on Railsのaccepts_nested_attributes_forを使って、関連テーブルをまとめて登録する方法をご紹介します。

【Rails】accepts_nested_attributes_forで関連テーブルをAjaxで一括登録する方法

まず、登録したいモデルの親側にaccepts_nested_attributes_forメソッドを追加します。

今回は例としてdepartment(部署)とstaff(部員)を多対一の関係としてモデルを作成しています。

・app/models/department.rb

・app/models/staff.rb

これでモデルの準備は完了です。

Ajaxを使ってフォームから一括登録する

一括登録するために、以下のようなデータを用意します。実際に用意する時はユーザが入力した情報にあわせてJSでDOM生成する形になると思います。

以下のような関連テーブルにあわせて入れ子の形にして作る必要があります。

・app\views\departments\_department_index.html.erb

用意したフォームの要素をURLクエリー用文字列にシリアライズし、Ajaxでサーバに送ります。

・app\assets\javascripts\departments.coffee

Ajaxで送られてきたデータをdepartment_paramsで整形することで、関連テーブルをまとめて一括登録することができます。

・app\controllers\departments_controller.rb

以上、accepts_nested_attributes_forで関連テーブルをまとめて登録する方法でした。