🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 6

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

Ruby on Rails

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

Q&A

解決済

1回答

464閲覧

Ruby on Rails Rails チュートリアル 第6章

ghoooo4it

総合スコア13

Ruby on Rails 6

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/01/23 07:22

##概要
テキスト通りに進めているのですが、テストを実行したところエラーが生じてしまいます。

##詰まった部分
テキスト(Rails6.0 第6版)の第6章 リスト6.38まではテキスト通りの挙動が得られ問題なく実行することができましたが、6.39でテストを実行すると本来失敗するべき部分ですが、なぜか成功してしまいます。
また、6.40の通りに test/models/user_test.rb を以下のようにし、テストを実行すると今度は成功するはずが失敗してしまいます。

require 'test_helper' class UserTest < ActiveSupport::TestCase def setup @user = User.new(name: "Example User", email: "user@example.com", password: "foobar", password_confirmation: "foobar") end . . . end

失敗時のエラーメッセージは以下の文を数値の部分を変えていくつも表示されます。(量が多いため一部抜粋)

E Error: UserTest#test_email_should_be_present: ActiveModel::UnknownAttributeError: unknown attribute 'password' for User. test/models/user_test.rb:6:in `setup' rails test test/models/user_test.rb:19 E Error: UserTest#test_email_validation_should_reject_invalid_addresses: ActiveModel::UnknownAttributeError: unknown attribute 'password' for User. test/models/user_test.rb:6:in `setup' rails test test/models/user_test.rb:43 ・ ・ ・

/app/models/user.rb のコードは下に乗せておきます。

class User < ApplicationRecord before_save { self.email = email.downcase } validates :name, presence: true, length: { maximum: 50 } 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: true has_secure_password end

同様に、 /sample_app/test/models/user_test.rb のコードも下に乗せておきます。

require 'test_helper' class UserTest < ActiveSupport::TestCase def setup @user = User.new(name: "Example User", email: "user@example.com", password: "foobar", password_confirmation: "foobar") end test "should be valid" do assert @user.valid? end test "name should be present" do @user.name = "" assert_not @user.valid? end test "email should be present" do @user.email = " " assert_not @user.valid? end test "name should not be too long" do @user.name = "a" * 51 assert_not @user.valid? end test "email should not be too long" do @user.email = "a" * 244 + "@example.com" assert_not @user.valid? end test "email validation should accept valid addresses" do valid_addresses = %w[user@example.com USER@foo.COM A_US-ER@foo.bar.org first.last@foo.jp alice+bob@baz.cn] valid_addresses.each do |valid_address| @user.email = valid_address assert @user.valid?, "#{valid_address.inspect} should be valid" end end test "email validation should reject invalid addresses" do invalid_addresses = %w[user@example,com user_at_foo.org user.name@example. foo@bar_baz.com foo@bar+baz.com] invalid_addresses.each do |invalid_address| @user.email = invalid_address assert_not @user.valid?, "#{invalid_address.inspect} should be invalid" end end test "email addresses should be unique" do duplicate_user = @user.dup @user.save assert_not duplicate_user.valid? end end

##試したこと(考えうる原因)
原因がわからなかったため下手に試すことができなかった。
調べてみても同じような症状の方がいたが、対応方法について記述が省略されていたためわからなかった。

##バージョン
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
Rails 6.0.3

##最後に
不足部分があれば随時教えていただけると幸いです。

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

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

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

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

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

gpsoft

2021/01/23 09:22

userテーブルに、password_digestというカラムがありますか? Userモデルに、has_secure_passwordを追加したあと、DBマイグレーションしてpassword_digestカラムを追加する必要があるんじゃないかなぁ…。チュートリアル読んでないので、外してたらすみません。
ghoooo4it

2021/01/23 09:30

回答ありがとうございます。 いろいろ試していたら解決できました。 原因は、反映させたはずのhas_secure_passwordがうまく反映されておらずそこが原因で、エラーが生じていたようです。 ちゃんと確認すれば起きないエラーでした。 せっかく回答してくださったのにすみません。
guest

回答1

0

自己解決

原因
>編集後のファイルが反映されていなかった

解決方法
>再度開きなおし反映させた。

お騒がせしてすみません

投稿2021/01/23 09:32

ghoooo4it

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問