前提
自作アプリのdatetime型のカラムにデータが,コントローラの記述で正しく入れられません.(Rails c では入れられます.以下の試したことに記載)
イマイチなんでかわからないので,皆さんの力を貸してください.
実現したいこと
User作成時点で,created_atのようなdatetime型のデータを入れたいです.
発生している問題・エラーメッセージ
以下は、Rails sして実際にローカルで立ち上げた後にユーザー登録画面から登録しようとした際に、コマンドプロンプトに出力されたものです。フォームに名前、メアド、パスワード、誕生日を入れてもらい、それと別でコントローラ内のコードでreceived _atという今回問題の値を入れるという流れです。
つまり、以下でメールなりなんなりが入った段階で問題のreceived _atにも入っててほしいわけなのに、入ってないのです。
→以下というのは追記に移行しました.Rails S した部分のログです.
このreceived_atがUser作成時点でcreated_atらと同様に入っていてほしいです.
該当のソースコード
RubyUserController
1 2before_action :authenticate_user! 3 4 def new 5 @user = User.new 6 end 7 8 def initialize 9 @user.received_at = params[received_at: :Time.now] 10 end 11 12 def create 13 @user = User.new(user_params) 14 @user.received_at = Time.now 15 if @user.save 16 @user.send_activation_email 17 flash[:info] = "Please check your email to activate your account." 18 redirect_to root_url, notice: "Please check your email to activate your account." 19 else 20 render 'new' 21 end 22 end 23 24 private 25 def user_params 26 params.require(:user).permit(:name, :email, :birthday, :received_at) 27 end 28 29
試したこと
実はこのアプリ自体作り直していて,その際は以下のコードで動いていました.(received_atが期待通りの値を取得していた.)
なので,一旦そのままコードをコピペしたらなぜか動かなくて,???ってなっています.
また,コンソールから確認してみたらそっちではできたので,カラムを追加していないとか,そういったことではなさそうです.
RailsConsole
1irb(main):001:0> user = User.create 2 TRANSACTION (0.1ms) BEGIN 3=> #<User id: nil, email: "", created_at: nil, updated_at: nil, name: nil, birthday: nil, received_at: nil> 4irb(main):002:0> user.received_at = Time.now 5=> 2022-10-16 21:04:36.530002067 +0900 6irb(main):003:0> p user 7#<User id: nil, email: "", created_at: nil, updated_at: nil, name: nil, birthday: nil, received_at: "2022-10-16 21:04:36.530002000 +0900"> 8=> #<User id: nil, email: "", created_at: nil, updated_at: nil, name: nil, birthday: nil, received_at: "2022-10-16 21:04:36.530002000 +0900">
補足情報(FW/ツールのバージョンなど)
Ruby 3.1.2
Rails 7.0.4
Devise Gem でユーザー登録実装
追記
rails s して試しに新規登録してみるとこんな感じで出ます.
どうしてreceived_atが入らないのか...
Started POST "/users" for ::1 at 2022-10-17 21:24:41 +0900 Processing by Devise::RegistrationsController#create as HTML Parameters: {"authenticity_token"=>"[FILTERED]", "user"=>{"name"=>"xxxx", "birthday"=>"2022-09-25", "email"=>"xxxxx.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"アカウント登録"} TRANSACTION (0.1ms) BEGIN User Exists? (0.6ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2 [["email", "xxxxxx.com"], ["LIMIT", 1]] User Create (0.5ms) INSERT INTO "users" ("email", "encrypted_password", "reset_password_token", "reset_password_sent_at", "remember_created_at", "sign_in_count", "current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "confirmation_token", "confirmed_at", "confirmation_sent_at", "unconfirmed_email", "failed_attempts", "unlock_token", "locked_at", "created_at", "updated_at", "name", "birthday", "received_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22) RETURNING "id" [["email", "xxxxx.com"], ["encrypted_password", "[FILTERED]"], ["reset_password_token", "[FILTERED]"], ["reset_password_sent_at", "[FILTERED]"], ["remember_created_at", nil], ["sign_in_count", 0], ["current_sign_in_at", nil], ["last_sign_in_at", nil], ["current_sign_in_ip", nil], ["last_sign_in_ip", nil], ["confirmation_token", "[FILTERED]"], ["confirmed_at", nil], ["confirmation_sent_at", "2022-10-17 21:24:41.804202"], ["unconfirmed_email", nil], ["failed_attempts", 0], ["unlock_token", "[FILTERED]"], ["locked_at", nil], ["created_at", "2022-10-17 21:24:41.804083"], ["updated_at", "2022-10-17 21:24:41.804083"], ["name", "xxxxxx"], ["birthday", "2022-09-25"], ["received_at", nil]]
ApplicationController.rb
1before_action :configure_permitted_parameters, if: :devise_controller? 2 3 protected 4 def configure_permitted_parameters 5 added_attrs = [ :email, :name, :birthday, :password, :password_confirmation, :received_at] 6 devise_parameter_sanitizer.permit :sign_up, keys: added_attrs 7 devise_parameter_sanitizer.permit :account_update, keys: added_attrs 8 devise_parameter_sanitizer.permit :sign_in, keys: added_attrs 9 end
回答1件
あなたの回答
tips
プレビュー