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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

1175閲覧

User.new(email: ----) で email カラムにデータが入りません。

kosu

総合スコア5

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/04/25 07:07

編集2020/04/28 03:15

前提・実現したいこと

Rails Tutorial で学習を進めています。第6章を終了したところで、ユーザー情報としてemailを登録できていないことに気が付きました。

発生している問題・エラーメッセージ

>> user.email => nil >> user.valid? User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE "users"."email" IS NULL AND ("users"."id" != ?) LIMIT ? [["id", 3], ["LIMIT", 1]] => false

該当のソースコード

>> User.new(name: "Example User",email: **"example@railstutorial.org"**,password: "foobar",password_confirmation: "foobar") => #<User id: nil, name: "Example User", email: "example@railstutorial.org", created_at: nil, updated_at: nil, password_digest: "$2a$10$AvuhQfkuYokovxBk3SgbgOmotf1M/biwF0fmdKBCa/H..."> >> user.save (0.1ms) begin transaction User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER(?) LIMIT ? [["email", "user@example.com"], ["LIMIT", 1]] SQL (2.1ms) ** INSERT INTO "users" ("name",** "created_at", "updated_at", "password_digest") VALUES (?, ?, ?, ?) [["name", "Example User"], ["created_at", "2020-04-25 05:39:44.686473"], ["updated_at", "2020-04-25 05:39:44.686473"], ["password_digest", "$2a$10$I1h3oSRkzCOPbx94Q49Izeg4wmXYvDXf3OZkO2XGkyq.sFRQRjPKW"]] (6.6ms) commit transaction => true

試したこと

email のバリデーションを段階的に外してみましたが、変化はありません。
insert_intoの項目にemailが入っていないことが原因と推測しましたが、migrationファイルにも異常は見当たりませんでした。
データベースを見ると、emailの項目だけnullと表示されています。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Ruby

1user = User.new(name: "Example User", email: "example@railstutorial.org", password: "foobar", password_confirmation: "foobar") 2user.save

ということではありませんか?

投稿2020/04/28 07:12

mktia

総合スコア110

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

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

kosu

2020/04/28 08:18

ご回答いただきありがとうございます。 コードに不備があり申し訳ございません。表示画面以上にてuser = User.new(,,,)の処理を行っておりまして、その結果がuser.saveで現れたとお考え下さい。
mktia

2020/04/28 10:09

そうだったのですね、失礼しました。 「発生している問題・エラーメッセージ」の欄で気になったことなのですが、 `user = User.new(...)` でユーザを作成した直後に `user.valid?` を入力した場合に `false` になるのでしょうか?
kosu

2020/04/30 09:32

こちらがより正確なコードです。いかがでしょうか。 user = User.new(name: 'abcabc', email: 'kosu.3333@comcom', password: 'kosuke', password_confirmation: 'kosuke') => #<User id: nil, name: "abcabc", email: "kosu.3333@comcom", created_at: nil, updated_at: nil, password_digest: "$2a$10$47SYOOysT4EfITBdpPHnd.koUxlIul5kgRTlczNdKb8..."> >> user.valid? User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER(?) LIMIT ? [["email", "kosu.3333@comcom"], ["LIMIT", 1]] => false 上記はvalidationを以下に設定した時に起きたエラーです。 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i validates :email, presence: true, length: { maximum: 255 }, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
mktia

2020/04/30 10:25 編集

追記ありがとうございます. データベースに載せられるか否かにかかわらず user.valid? の結果が true である必要があるので,追記いただいたコードによればそこがネックになっているのかと思います. バリデーションを利かせた場合ですと,@example.com のようにドットが含まれていなければ通れないように思います.
kosu

2020/05/01 03:54

email を正しく設定したところ、問題を解決することができました。 mktiaさん、根気強く自分の間違いを正してくださり、本当に感謝しています。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問