質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

解決済

1回答

379閲覧

Rails でdatetime型の値を正しく入れられません.

sasaharukimedes

総合スコア27

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

0グッド

0クリップ

投稿2022/10/16 12:48

編集2022/10/17 13:12

前提

自作アプリの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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2022/10/16 21:07

発生している問題・エラーメッセージ のところに載っている Arrayはなにものですか?
sasaharukimedes

2022/10/17 00:19

質問ありがとうございます。rails sしてローカルでユーザー登録してみた際の、コマンドプロンプトの出力結果です。追記しました。
winterboum

2022/10/17 01:09

コマンドプロンプトの出力?? rails server の出力ですか? 配列の配列というのが?? なのですが、Hashの様な形ならわかりますが。 codeのどの部分でのlogか、というのはわかりますか? @user = User.new(user_params) のところということはない? あと、 1. user_params 載せてください 2. def initialize はなんのためにありますか?
sasaharukimedes

2022/10/17 12:34

回答ありがとうございます,言葉足らず,説明不足ですいません.ログを追記し直しました. 1,載せます. 2,どうにもうまいことreceived_atが入ってないようなので,initializeに記載したらuserを作った段階でうまいこと入るんじゃないかなと思って書いてみてます.
winterboum

2022/10/17 12:57

それやると ApplicationController で定義してある initialize が無効になるので、よろしくないですね。 それをやるなら before_action を調べてください
winterboum

2022/10/17 12:58

codeのどの部分でのlogか、というのはわかりますか? @user = User.new(user_params) のところということはない?
sasaharukimedes

2022/10/17 13:11

>>それやると ApplicationController で定義してある initialize が無効になるので、よろしくないですね。 それをやるなら before_action を調べてください applicationcontrollerにはinitialize書かれてませんが,どういう意味でしょうか?一応追記しておきます. >>codeのどの部分でのlogか、というのはわかりますか? @user = User.new(user_params) のところということはない? すいません,これに関してはどこを見たら分かりますか?
guest

回答1

0

自己解決

Models/User.rbに以下のコードを追加したら,機能しました.

attribute :received_at, :datetime, default: -> { Time.now }

投稿2022/10/17 13:37

sasaharukimedes

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問