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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Ruby on Rails

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

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Q&A

解決済

1回答

1465閲覧

Railsチュートリアル12章の頭でエラーが出て・・・。

helo

総合スコア36

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Ruby on Rails

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

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

0グッド

0クリップ

投稿2020/03/01 09:37

編集2020/03/01 10:54

前提・実現したいこと

チュートリアル12章を始めた冒頭で、意味の解らないというか間違いなく記述しているのにPassword forgotページから有効なアドレスを入れると必ずエラーとなってしまいます。諸々原因を探してみたのですが、コードにはなにも間違いがありません。
行き詰ってしまい、アドバイス等頂ければ大変ありがたいです。
よろしくお願いします。

発生している問題・エラーメッセージ

NoMethodError in PasswordResetsController#create undefined method `reset_sent_at=' for #<User:0x000000000e4480a0> Did you mean? reset_token= self.reset_token = User.new_token update_attribute(:reset_digest, User.digest(reset_token)) update_attribute(:reset_sent_at, Time.zone.now) end @user = User.find_by(email: params[:password_reset][:email].downcase) if @user @user.create_reset_digest @user.send_password_reset_email flash[:info] = "Email sent with password reset instructions" redirect_to root_url ### 該当のソースコード ```ここに言語名を入力 app/models/user.rb #パスワード再設定の属性を設定する def create_reset_digest self.reset_token = User.new_token update_attribute(:reset_digest, User.digest(reset_token))   update_attribute(:reset_sent_at, Time.zone.now)        end #パスワード再設定のメールを送信する def send_password_reset_email UserMailer.password_reset(self).deliver_now end

試したこと

12章に入ってからやったことはすべて見直したのですが、解りません。。。

補足情報(FW/ツールのバージョンなど)

Windows10、 コンソールはgit bash

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

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

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

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

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

asm

2020/03/01 22:54

db:migrateなどは行いましたか?
helo

2020/03/02 12:29

asm様 コメントありがとうございます。 はい、migrateは行っております。 どうなっているのか解らずです・・。
guest

回答1

0

ベストアンサー

undefined method `reset_sent_at=' for #User:0x000000000e4480a0 Did you mean? reset_token=

reset_sent_atに対する代入メソッドがないと言われているので
疑うべきはmigrateが正常に完了し、reset_sent_atカラムが存在しているかです。

確かめる方法としては

  • rails dbconsoleからテーブル構成を確認する
  • rails consoleからUser.column_namesを確認する
  • db/migrate/*_add_reset_to_users.rbを確認する

これらから選びます。

対処法としては、

  1. rails db:rollback
  2. db/migrate/*_add_reset_to_users.rbを編集する
  3. rails db:migrate

を行います。

投稿2020/03/03 01:59

asm

総合スコア15147

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

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

helo

2020/03/04 11:53

asm様 ありがとうございます。 ご指示の様に(これで良かったのか自信はありません) やってみました。以下のような結果になってしまいました・・・。 たぶん私の理解不足かとは思いますがエラーが出てしまいました。 $ rails c Loading development environment (Rails 5.1.6) irb(main):001:0> User.column_names => ["id", "name", "email", "created_at", "updated_at", "password_digest", "remember_digest", "admin", "activation_digest", "activated", "activated_at", "reset_digest"] $ rails db:rollback == 20200301052622 AddResetToUsers: reverting ================================== -- remove_column(:users, :reset_digest, :string) -> 0.0142s == 20200301052622 AddResetToUsers: reverted (0.0265s) ========================= マイグレーションファイルに、:reset_sent_at を記述し、 $ rails db:migrate == 20200301052622 AddResetToUsers: migrating ================================== -- add_column(:users, :reset_sent_at, :reset_digest, :string) rails aborted! StandardError: An error has occurred, this and all later migrations canceled: no implicit conversion of Symbol into Integer C:/Users/tae-t/OneDrive/デスクトップ/ruby_lesson/sample_app/db/migrate/20200301052622_add_reset_to_users.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' Caused by: TypeError: no implicit conversion of Symbol into Integer C:/Users/tae-t/OneDrive/デスクトップ/ruby_lesson/sample_app/db/migrate/20200301052622_add_reset_to_users.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' Tasks: TOP => db:migrate (See full trace by running task with --trace)
asm

2020/03/04 22:00 編集

migrationファイルの編集方法が分からないのであれば そのファイルは破棄して rails generate migration add_reset_to_users reset_digest:string reset_sent_at:datetime をやりなおせばよいかと思います。
helo

2020/03/06 12:46

asm様 ありがとうございます。 migrateファイルを編集し、db:migrateを行ったのですが以下のエラーが出てしまいました。 $ rails db:migrate == 20200306122823 AddResetToUsers: migrating ================================== -- add_column(:users, :reset_digest, :string) rails aborted! StandardError: An error has occurred, this and all later migrations canceled: SQLite3::SQLException: duplicate column name: reset_digest: ALTER TABLE "users" ADD "reset_digest" varchar C:/Users/tae-t/OneDrive/デスクトップ/ruby_lesson/sample_app/db/migrate/20200306122823_add_reset_to_users.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' Caused by: ActiveRecord::StatementInvalid: SQLite3::SQLException: duplicate column name: reset_digest: ALTER TABLE "users" ADD "reset_digest" varchar C:/Users/tae-t/OneDrive/デスクトップ/ruby_lesson/sample_app/db/migrate/20200306122823_add_reset_to_users.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' Caused by: SQLite3::SQLException: duplicate column name: reset_digest C:/Users/tae-t/OneDrive/デスクトップ/ruby_lesson/sample_app/db/migrate/20200306122823_add_reset_to_users.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' Tasks: TOP => db:migrate (See full trace by running task with --trace) ブラウザーのエラーは、変わりました。 メッセージのmigrateコマンドもやってみたのですが結果は同じでした。 どうすれば良いでしょうか・・・。 ActiveRecord::PendingMigrationError Migrations are pending. To resolve this issue, run: bin/rails db:migrate RAILS_ENV=development Extracted source (around line #576): # Raises <tt>ActiveRecord::PendingMigrationError</tt> error if any migrations are pending. def check_pending!(connection = Base.connection) raise ActiveRecord::PendingMigrationError if ActiveRecord::Migrator.needs_migration?(connection) end def load_schema_if_pending!
asm

2020/03/07 13:27

> duplicate column name: reset_digest ということは、reset_digestが既にデータベースにあるという事ですね DBの状況とmigration以下のファイルの状況が把握できないと ちょっとなんとも言いづらいです。
helo

2020/03/07 14:36

asm様 いつもありがとうございます。 今一度、dbを削除して、create,migrateを行って、再度forgot passwordをクリックしますとエラーが出ずに所定のresetページに遷移出来ました。 偶然なのかとは思いますが、色々アドバイスをいただきましたお陰です。 感謝いたします。ありがとうございました。m(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問