こんにちは!
Ralisチュートリアルの第6章の6.3.2のリスト6.39にて$ rails testが通らないトラブルが発生いたしました。これを解決したため、その方法を備忘録として残しておこうと思います。
2.【課題】
リスト6.39の$ rails testを実行した際、以下に記載の
エラーメッセージが表示されて、失敗する。(①)
⇒ activemodel::unknownattributeerror: unknown attribute 'password' for user.
画像①
3.【(考えられる)原因】
1) 'password'というカラムが入っていない。
→ 以下の画像の方法(②)にて、passwordのカラムがあることは確認できた。
画像②
しかし、以下
You don't have bcrypt installed in your application.
Please add it to your Gemfile and run bundle installというエラーメッセージを発見したため、Gemfileに bcryptをインストールし、bundle installを試みることにした。
2) Gemfileにbcryptがインストールされていない。
→ 以下の画像の方法(③)のようにコードを実施した結果、bundle installは完了した。
画像③
しかし、以下の画像④のように肝心のbcryptは未だインストールされない。
画像④
4.【開発環境】
PC: MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)
Ruby: ruby-2.6.3 [ x86_64 ]
Rails: Rails 6.0.3.5
OS: macOS 10.14.6
総合開発環境(IDE): AWS Cloud9
上記に対して、実際の原因は以下でした。
「”bcryptを使用する場合、パスワードを暗号化した値を入れるためのpassword_digestというカラムのみ追加される。
passwordやpassword_confirmationという値は、userクラスに属性としては追加されるが、データベースには対応していない。”」
つまり、実際のデータベースに保存されるのは、password_digest
の値のみであるということであるので、「"password_digestに直接値を入力するようなプログラムに書き換えればいい”」ということになります。
そのように書き換えたコードが以下の画像⑤になります。
画像⑤
そうすると、画像⑥のようにテストが通ることが確認できました。
画像⑥
もし同じ箇所で躓いている方がいらっしゃればご参考までに
ご覧いただけますといいかと思います。
いつもありがとうございます。それではまた!