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

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

ただいまの
回答率

87.79%

Ruby on Rails Tutorialの6.3.3のpassword validation error

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 722

score 12

前提・実現したいこと

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/ツールのバージョンなど)

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • winterboum

    2019/12/06 08:45

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

    キャンセル

  • CrankTank

    2019/12/09 18:50

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

    キャンセル

  • winterboum

    2019/12/09 18:56

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

    キャンセル

  • CrankTank

    2019/12/09 19:38

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

    キャンセル

回答 1

checkベストアンサー

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/10 14:44

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

    キャンセル

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

  • ただいまの回答率 87.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る