RailsでJSON型のデータを保存する

updated Sep 28, 2021created Sep 28, 2021
bash
Unpermitted parameter ...

というエラーが出力されていた。

Frontend

JSON型のデータを保存するPOSTリクエストを投げます。(JSON.stringify()に注目)

js
// 👇 JSON.stringify()で文字列にする await axios.post("/api/v1/users", { json_data: JSON.stringify(data) });

Rails

updateするパラメータの定義

rb
private def user_update_params params.require("user").permit(%i( json_data )) end

updateする処理

rb
data = user_update_params # 👈 別の変数に移す # 👇 JSON.parse()する if (data[:json_data]) data[:json_data] = JSON.parse(data[:json_data]) end current_user.user_update_params(data) # 👈 保存

✅ ポイント

  • user_update_paramsを文字列で通してから、JSON.parse()した値を再代入する。

Frontend呼び出し

Railsがいい感じで取得してくれるので、何もしなくて良い。リクエストの時のみJSON.stringify()する。

js
const res = await axios.get("/api/v1/users"); res.user.json_data // Object型