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出来た気がします。
回答1件
あなたの回答
tips
プレビュー