LoginSignup
0
0

More than 1 year has passed since last update.

rails 7でdevice を使用するとusersモデルに独自で追加したカラムが保存されない。

Last updated at Posted at 2022-09-12

先日のwatnowのハッカソンでアプリを開発をした際にRails 7.0.3を利用して開発しました。
ハッカソンで作ったアプリでログイン機能をrails7かつdeviceで実装するという選択をしたところハッカソンにおいて貴重な2時間を失ってしまいました。その際に得た知識が誰かの役にたてばなと思い記事にさせていただきました。

環境

Rails 7.0.3
Ruby 3.1.2

状況

Rails 7でdeviceでアカウント登録する際に独自に追加したカラムが保存されないという状況にハマりました。form_withを使用して実装しており、deviceが用意してくれているemailやnameといったカラムは保存されます。

エラー内容

deviceを使用してuserをcreateすると以下のようなエラーが出ました。

ログ
Started POST "/users" for ::1 at 2022-08-07 16:52:12 +0900
Processing by Devise::RegistrationsController#create as TURBO_STREAM
  Parameters: {"authenticity_token"=>"[FILTERED]", "user"=>{"name"=>"ノスケ", "email"=>"aaaa@email.jp", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "faculty"=>"1"}, "commit"=>"Sign up"}
  TRANSACTION (0.0ms)  begin transaction
  User Exists? (0.2ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = ? LIMIT ?  [["email", "nosuke@aaa.jp"], ["LIMIT", 1]]
  TRANSACTION (0.0ms)  rollback transaction
  Rendering layout layouts/application.html.erb

解決方法

deviceのコントローラー周りを見たりdbを見たり色々していたのですが解決せず
原因がRailsのバージョン7のせいで起こっているのではないかと思いました。

deviceのissueを見てみると

image.png

とのこと。
Rails7からturboがdefaultで導入されたみたいなのですが、deviceがturboに対応しておらずリクエストを送るときにturbo: falseにしないといけないとのことでした。

感想

開発記事が調べにくい最新のバージョンにgemを利用することはハッカソンにおいてアンチパターンなのかもしれないと思いました。短期的な開発スピードが必要なことは明らかでRails7を使用することにためらいはありましたが、結果的に悪感的中。Herokuにデプロイする際もRailsのバージョンが関係しておりつまづいてしまったので次回のハッカソンの時には気をつけたいと思いました。しかしそういうことも含めてハッカソン楽しかったです。

参考記事

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