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

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

詳細はこちら
Ruby on Rails 5

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

Ruby

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

Q&A

解決済

1回答

927閲覧

Ruby on Rails Tutorialの6.3.3のpassword validation error

CrankTank

総合スコア12

Ruby on Rails 5

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

Ruby

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

0グッド

1クリップ

投稿2019/11/21 04:23

編集2019/12/09 10:37

前提・実現したいこと

Ruby on Rails Tutorial の6.3.3においてパスワードの最小文字設定をしようとすると以下のエラーメッセージが出てくる。
user.rbにvalidate :passwordを追加した途端エラーが起こるようになった。
ERRORの内容を調べたがわからないです。
自分でできることをやってみましたが解決できませんでした。
エラーの解決方法を知りたいです。
よろしくおねがいします。

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

[1] guard(main)>
13:03:04 - INFO - Run all
13:03:04 - INFO - Running: all tests
Started with run options --seed 41877

FAIL["test_should_be_valid", UserTest, 0.20440399972721934]
test_should_be_valid#UserTest (0.20s)
Expected false to be truthy.
test/models/user_test.rb:15:in `block in class:UserTest'

FAIL["test_email_validation_should_accept_valid_addresses", UserTest, 0.22857500007376075]
test_email_validation_should_accept_valid_addresses#UserTest (0.23s)
"user@example.com" should be valid
test/models/user_test.rb:38:in block (2 levels) in <class:UserTest>' test/models/user_test.rb:36:in each'
test/models/user_test.rb:36:in `block in class:UserTest'

ERROR["test_email_addresses_should_be_downcase", UserTest, 0.23315300000831485]
test_email_addresses_should_be_downcase#UserTest (0.23s)
ActiveRecord::RecordNotFound: ActiveRecord::RecordNotFound: Couldn't find User without an ID
test/models/user_test.rb:62:in `block in class:UserTest'

15/15: [========================================] 100% Time: 00:00:00, Time: 00:00:00

Finished in 0.59527s
15 tests, 29 assertions, 2 failures, 1 errors, 0 skips

/Users/myname/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/guard-2.13.0/lib/guard/jobs/pry_wrapper.rb:279: warning: method Pry#input_array is deprecated. Use Pry#input_ring instead

該当のソースコード

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\d\-]+)*.[a-z]+\z/i validates :email, presence: true, length: { maximum: 255 }, format: {with: VALID_EMAIL_REGEX}, uniqueness: {case_sensitive: false} has_secure_password validates :password, presence: true, length: { minimum: 6 } end user_test.rb require 'test_helper' class UserTest < ActiveSupport::TestCase # test "the truth" do # assert true # end def setup @user = User.new(name: "Chosu Riki", email:"kuttemina@tobuzo.com", password: "chosu", password_confirmation: "chosu") end test "should be valid" do @user.save assert @user.valid? end test "name should be present" do @user.name = " " assert_not @user.valid? end test "name should not be too long" do @user.name = "a" * 51 assert_not @user.valid? end #email validation section test "email should not be too long" do @user.email = "a" * 244 + "@tobuzoooo.com" assert_not @user.valid? end test "email validation should accept valid addresses" do valid_addresses = %w[user@example.com USER@foo.COM A_DHDH@foo.bar.org first.last@foo.jp alice_bob@boz.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.jp user.name@example. foo@bar_baz.com foo@bar+bar.com user@foo..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 duplicate_user.email = @user.email.upcase @user.save assert_not duplicate_user.valid? end test "email addresses should be downcase" do random_case_email = "FOo@exAMple.Com" @user.email = random_case_email @user.save assert_equal random_case_email.downcase, @user.reload.email end #password validation section test "password should be present (nonblank)" do @user.password = @user.password_confirmation = " " * 6 assert_not @user.valid? end test "password should have a minimum length" do @user.password = @user.password_confirmation = "a" * 5 assert_not @user.valid? end end ```ここに言語名を入力 Ruby ソースコード

試したこと

ここに問題に対して試したことを記載してください。

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

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

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

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

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

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

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

winterboum

2019/12/05 23:45

test/models/user_test.rb の方が必要です。
CrankTank

2019/12/09 09:50

ご指摘ありがとうございます。 修正いたしました。
winterboum

2019/12/09 09:56

表示が乱れていて読みにくいです。 ソースの直前と直後に半角逆コーテーション 3つ の行 ``` を挿入して下さい。整形されます
CrankTank

2019/12/09 10:38

ありがとうございます。 修正いたしました
guest

回答1

0

ベストアンサー

passwordのvalidation 6文字以上を入れたので

def setup @user = User.new(name: "Chosu Riki", email:"kuttemina@tobuzo.com", password: "chosu", password_confirmation: "chosu") end

passwordがvalidationにひっかかっています。

一般的に
今まで良かったのに、何したら、以降おかしくなった
というのは 何したら が原因になっているので(間接かもですが)そこに着目して調べると早いでs

投稿2019/12/09 11:23

winterboum

総合スコア23567

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

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

CrankTank

2019/12/10 05:44

ご回答、アドバイスありがとうございます。 修正したところ問題なく動作しました。 助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問