💎
【Rails】ActiveModel::UnknownAttributeError
はじめに
Railsチュートリアル(第7版)
「6.3〜6.4 パスワードとハッシュ化、デプロイ用スクリプトの導入」を進めている際に遭遇したエラーをメモ書きで共有
※ Railsチュートリアル(第7版)動画解説を一部引用
エラーが出るまでの経緯
rails c --sandbox
を開き以下を入力
irb(main):001> User.create(name: "John Smith", email: "john@example.com", password: "foobar", passwordconfirmation: "foobar")
エラーメッセージ
TRANSACTION (0.0ms) begin transaction
/usr/local/rvm/gems/default/gems/activemodel-7.0.4.3/lib/active_model/attribute_assignment.rb:51:in `_assign_attribute': unknown attribute 'passwordconfirmation' for User. (ActiveModel::UnknownAttributeError)
raise UnknownAttributeError.new(self, k.to_s)
要点
ActiveModel::UnknownAttributeError
エラー内容
「Userモデルにpasswordconfirmationという属性が存在しないために発生していますよ」というエラー
原因
タイポ
test/models/user_test.rb
def setup
@user = User.new(name: "Example User", email: "user@example.com",
password: "foobar", password_confirmation: "foobar")
end
上記を参考に修正
before
passwordconfirmation
after
password_confirmation
再度確認
User作成に成功
irb(main):002> User.create(name: "John Smith", email: "john@example.com", password: "foobar", password_confirmation: "foob
ar")
TRANSACTION (0.1ms) SAVEPOINT active_record_1
User Exists? (4.0ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = ? LIMIT ? [["email", "john@example.com"], ["LIMIT", 1]]
User Create (0.5ms) INSERT INTO "users" ("name", "email", "created_at", "updated_at", "password_digest") VALUES (?, ?, ?, ?, ?) [["name", "John Smith"], ["email", "john@example.com"], ["created_at", "2024-04-09 01:02:15.297182"], ["updated_at", "2024-04-09 01:02:15.297182"], ["password_digest", "[FILTERED]"]]
TRANSACTION (0.1ms) RELEASE SAVEPOINT active_record_1
password_digest
に "[FILTERED]"
がカバーされている点も確認
=>
#<User:0x00007f728c7d5658
id: 1,
name: "John Smith",
email: "john@example.com",
created_at: Tue, 09 Apr 2024 01:02:15.297182000 UTC +00:00,
updated_at: Tue, 09 Apr 2024 01:02:15.297182000 UTC +00:00,
password_digest: "[FILTERED]">
その他の要点
「パスワードはデータベースに平文で保存されない、ハッシュ値で保存される🔑」
以下スライド大変わかりやすく印象に残りました📚
先ほど作成した
※ Railsチュートリアル(第7版)動画解説を一部引用
参考
Railsチュートリアル(第7版)
エラー文で検索してヒット
Discussion