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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails

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

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

バージョン管理

バージョン管理はコンピューター上にファイルとして格納されているドキュメント・プログラム・その他の情報の変更履歴等を管理するものです

Q&A

解決済

1回答

1824閲覧

ActiveModel::UnknownAttributeError (unknown attribute 'password' for User.)とエラーが出てしまいます。

mickey_mouse

総合スコア2

Ruby on Rails 5

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails

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

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

バージョン管理

バージョン管理はコンピューター上にファイルとして格納されているドキュメント・プログラム・その他の情報の変更履歴等を管理するものです

0グッド

0クリップ

投稿2020/08/21 14:03

編集2020/08/21 14:31

rails初学者です。
Ruby on Rails5 速習実践ガイドというテキスト本の内容に沿って、
railsでタスク管理アプリを作成しています。

現在Userモデルを作成しているのですが、コンソールでエラーが出てしまい、知見をお借りできないでしょうか?

以下エラーまでの手順です。

generateコマンドでuserモデルを作り、

$ bin/rails g model user name:string email:string password_digest:string

生成されたマイグレーションファイルを編集し、(db/migrate/xxxxxx_create_users.rb)

class CreateUsers < ActiveRecord::Migration[5.2] def change create_table :users do |t| t.string :name, null: false t.string :email, null: false t.string :password_digest, null: false t.timestamps t.index :email, unique: true end end end

その後、bin/rails db:migrateを実行しました。
そして、Gemfile内にある、

gem 'bcrypt', '~>3.1.7'

上記のgemをインストール$ bundleしてから、
app/models/user.rb にhas_secure_passwordを記述しました。

class User < ApplicationRecord has_secure_password end

ここで試しにコンソールでuserオブジェクトを作り、saveしてみたところ、タイトルに書いたエラーとなりました。

irb(main):003:0> user = User.new(name: 'ユーザー', email: 'sample@example.com', password: 'password', password_confirmation: 'password') Traceback (most recent call last): 1: from (irb):3 ActiveModel::UnknownAttributeError (unknown attribute 'password' for User.) irb(main):004:0> user.save (0.1ms) BEGIN User Create (25.3ms) INSERT INTO "users" ("name", "email", "password_digest", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["name", "匿名"], ["email", "user@example.com"], ["password_digest", "digest"], ["created_at", "2020-08-21 12:32:11.655131"], ["updated_at", "2020-08-21 12:32:11.655131"]] (0.2ms) ROLLBACK Traceback (most recent call last): 1: from (irb):4 ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_email") DETAIL: Key (email)=(user@example.com) already exists. : INSERT INTO "users" ("name", "email", "password_digest", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"

試しにpasswordカラム無しでuserオブジェクトを作成したところ、save出来ました。

irb(main):006:0> user = User.new(name: 'neko', email: 'neko@example.com', password_digest: 'nekoneko') => #<User id: nil, name: "neko", email: "neko@example.com", password_digest: "nekoneko", created_at: nil, updated_at: nil> irb(main):007:0> user.save (0.9ms) BEGIN User Create (0.9ms) INSERT INTO "users" ("name", "email", "password_digest", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["name", "neko"], ["email", "neko@example.com"], ["password_digest", "nekoneko"], ["created_at", "2020-08-21 12:56:20.958441"], ["updated_at", "2020-08-21 12:56:20.958441"]] (33.8ms) COMMIT => true

マイグレーションのステータスは下記の様になっております。

database: taskleaf_development Status Migration ID Migration Name -------------------------------------------------- up 20200820084740 Create tasks up 20200821075037 Change tasks name not null up 20200821080602 Change task name limit30 up 20200821105258 Create users

schema.rbファイルは下記の様になっております。

ActiveRecord::Schema.define(version: 2020_08_21_105258) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" create_table "tasks", force: :cascade do |t| t.string "name", limit: 30, null: false t.text "description" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "users", force: :cascade do |t| t.string "name", null: false t.string "email", null: false t.string "password_digest", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["email"], name: "index_users_on_email", unique: true end end

長文になり読みづらかったら申し訳ありません。
ファイルの記述はテキストの通りなのですが、解決策が分からず質問させていただきました。
よろしくお願いいたします。

後述

その後、railsコンソールを開いたままだったことに気が付き、
railsコンソールを閉じて(exit)してから、また開き、
userオブジェクトをsaveしてみたところ、

user = User.new(name:"いぬ",email:"inu@example.com",password:"inuinu",password_confirmation:"inuinu") => #<User id: nil, name: "いぬ", email: "inu@example.com", password_digest: "$2a$12$UCNiweVKT91GTJ1.FZSUdePOKzWzHm3NttY27hMTOMw...", created_at: nil, updated_at: nil> irb(main):002:0> user.save (0.2ms) BEGIN User Create (49.3ms) INSERT INTO "users" ("name", "email", "password_digest", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["name", "いぬ"], ["email", "inu@example.com"], ["password_digest", "$2a$12$UCNiweVKT91GTJ1.FZSUdePOKzWzHm3NttY27hMTOMwiEoyw.IFiK"], ["created_at", "2020-08-21 14:18:29.743542"], ["updated_at", "2020-08-21 14:18:29.743542"]] (5.1ms) COMMIT => true irb(main):003:0> user.password_digest => "$2a$12$UCNiweVKT91GTJ1.FZSUdePOKzWzHm3NttY27hMTOMwiEoyw.IFiK"

エラーが出ず、save出来た気がします。

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

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

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

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

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

naokit-dev

2020/08/22 02:32

おっしゃるとおり、コンソールの再起動が必要ですね 解決されたようでなによりです 後から見る方がわかりやすいように補足があれば加えていただき質問を閉じていただければと思います
guest

回答1

0

ベストアンサー

bcrypt 3.1.7に固有のバグがあるようです
3.1.11以降で解消されているようですので

gem 'bcrypt', '~>3.1.11'

として

bundle install

でいかがでしょうか

投稿2020/08/21 14:15

編集2020/08/21 14:44
naokit-dev

総合スコア424

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

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

mickey_mouse

2020/08/21 14:23

コメントいただきありがとうございます。 はい、テキストには$ bundleと書いてありまして、 $ bundle installではなく、$bundleでインストールされた模様です。
naokit-dev

2020/08/21 14:33

bundle install = bundle のようですね知識不足でした インストールの際エラー等は出ていませんか? 通常、インストールされていれば has_secure_password によって、"password"という属性が扱えるようになると思います
naokit-dev

2020/08/21 14:34

未解決ですがこちらに似ていて気になっています Ruby on Rails - ユーザー登録でunknown attribute 'password' for User. とエラーになるteratail]https://teratail.com/questions/100777
naokit-dev

2020/08/21 14:45

回答へんこういたしました
mickey_mouse

2020/08/22 03:40 編集

度々すみません。 gem 'bcrypt', '~>3.1.11' に変更してから $ bundle installしてから、 試しにuserオブジェクトを作成してみました。 user idがnilになっているのですが、正しく保存されているのでしょうか? user = User.new(name:'とり',email:'tori@example.com',password:'toritori',password_confirmation:'toritori') => #<User id: nil, name: "とり", email: "tori@example.com", password_digest: "$2a$12$5QBJN/.8h26OcUkHNF2Xy.UjkKxoavgQBLR5Ed3P6pM...", created_at: nil, updated_at: nil> irb(main):002:0> user.save (0.1ms) BEGIN User Create (0.6ms) INSERT INTO "users" ("name", "email", "password_digest", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["name", "とり"], ["email", "tori@example.com"], ["password_digest", "$2a$12$5QBJN/.8h26OcUkHNF2Xy.UjkKxoavgQBLR5Ed3P6pMjxmr2z6N9q"], ["created_at", "2020-08-22 03:31:53.733020"], ["updated_at", "2020-08-22 03:31:53.733020"]] (53.0ms) COMMIT => true
naokit-dev

2020/08/22 11:28

idはDBにレコードが登録されるまでnilです saveの後、 User.lastで呼び出すとidが振られているのではないでしょうか?
mickey_mouse

2020/08/23 11:25

返信が遅くなり申し訳ありません。 User.lastで呼び出してみたところ、idが振られておりました! 質問へご返答いただき感謝しております。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問