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

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

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

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

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Q&A

解決済

1回答

1841閲覧

【rails】deviseでアカウント登録の確認メール NameError in Devise::RegistrationsController#create

seen

総合スコア49

Ruby on Rails 5

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

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

1グッド

2クリップ

投稿2018/08/11 11:59

編集2018/08/12 10:16

作業環境
ruby 2.3.1
rails 5.1.5
devise 4.4.3

すでにデバイスで認証機能を使っていましたが今回、確認メールを送る機能を追加しようとしています。
こちらの記事を参考にやってみましたがエラーが出ます。

NameError in Devise::RegistrationsController#create undefined local variable or method `confirmed_at' for #<User:0x007f94f3b4c370> Did you mean? confirmed? Extracted source (around line #432): 430 431 432 433 434 435 else match = matched_attribute_method(method.to_s) match ? attribute_missing(match, *args, &block) : super end end

アカウント認証ページのメールアドレスとパスワードを入力して実行とすると現れます。

行った作業としては 
db/migrate/xxxxxxxxxxxx_devise_create_users.rbにて下記のコメントアウトされていた部分を
解除して

## Confirmable t.string :confirmation_token t.datetime :confirmed_at t.datetime :confirmation_sent_at t.string :unconfirmed_email # Only if using reconfirmable

マイグレイト

$ rails db:migrate

app/model/user.rbにて

app/model/user.rb devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable

最後に :confirmableを追加
config/environments/development.rbに

config.action_mailer.smtp_settings = { :enable_starttls_auto => true, :address => "smtp.gmail.com", :port => 587, :domain => 'smtp.gmail.com', :user_name => "xxxxxxx@gmail.com", :password => "xxxxxxxxxxx", :authentication => 'login', }

×××にはメールアドレス、バスワードを記述。

以上です。
グーグルの2段階認証は設定していません。

別の記事では/db/migrate/yyyymmddxxxxxx_add_confirmable_to_devise.rbのようなマイグレイトファイルを作るやり方もあるようで、自分がやったやり方では何か必要なものが抜けているのでしょうか。
すみませんがご教示いただけると幸いです。
よろしくお願いします。

追記

マイグレイト状況です

[vagrant@localhost mymemo]$ rails db:migrate:status database: mymemo_development Status Migration ID Migration Name -------------------------------------------------- up 20180310093943 ********** NO FILE ********** up 20180316050319 Create artists up 20180321002345 Devise create users up 20180321071218 Add user id to artist up 20180322044720 Create stages up 20180322145203 Add artist id to stage up 20180402024450 Add kyokumei to artist up 20180424121356 Add toiawase to artist up 20180509123146 ********** NO FILE ********** [vagrant@localhost mymemo]$ rails db:version Current version: 20180509123146
machine_gun👍を押しています

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

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

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

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

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

takahashim

2018/08/11 15:39

bin/rails db:migrate:status と、 bin/rails db:version を実行した結果の出力を教えていただけますか?
seen

2018/08/12 10:19 編集

コメントいただきありがとうございます。 実行してみました。本文追記にて記載しました。 最新のマイグレイションはNO FILEとなっているようです… よろしくお願いします。
takahashim

2018/08/12 10:23

ありがとうございます、あとは回答に書いておきますね
guest

回答1

0

ベストアンサー

「undefined local variable or method `confirmed_at' for #User:0x007f94f3b4c370」というのはUserクラスにconfirmed_atというメソッドがない、というエラーなのですが、このメソッドはdbから生成されるはずです。なので、db:migrateがうまくいってないのではないかという気がします。
DBのusersテーブルを見てみると、confirmed_atカラムが落ちてしまっているとか。

とりあえずmigrateを最初からやり直したいので、seed等を手動で変更するとこが特にないなら、

bin/rails db:drop bin/rails db:create bin/rails db:migrate

などと最初からmigrationを実行してみるとどうでしょうか。

投稿2018/08/12 10:36

takahashim

総合スコア1877

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

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

seen

2018/08/12 12:48

ありがとうございます!ちょっとやってみます!
seen

2018/08/12 14:27

すみません、やってみましてエラーは出なくなりました。 それでアカウント登録後のリダイレクト先として指定しているメンバー詳細を打ち込む画面があるのですが、そこには行かずトップページに行きます。 これは今回メール認証後に入れるようにしたい画面なので取り合えいずトップや今後指定するところにいかせばと思うのですが、メールが届いておりません。 一つはiphoneメールに送って届かず、2つ目にyahooメールを試したところ、googleのアカウントのセキュリティメールのようなものが届いています。 それからデバイスをかけているuserモデルのデータベースを確認したところconfirmed_atカラムは今もない状態です。 やはり質問本文の下の方にも記載しましたが /db/migrate/yyyymmddxxxxxx_add_confirmable_to_devise.rb とカラムは別途手動で作らないといけないのでしょうか?  本文冒頭にリンクさせていただいた参考サイトでは手動でカラムを追加していないようだったので取り合えずその通りにやってみたつもりなんですが。。 その他の記事とはSMTPに指定する部分が自分の希望するパターンと違ったのでその記事を参考にしております。 現状このような感じです。 お手数ですが引き続きアドバイスを頂けたら幸いです。よろしくお願いします。
takahashim

2018/08/12 14:51

> それからデバイスをかけているuserモデルのデータベースを確認したところconfirmed_atカラムは今もない状態です。 どうやって確認されましたか? > とカラムは別途手動で作らないといけないのでしょうか?  いけないわけではないと思いますが、usersテーブルにカラムが追加されているかどうかが全てです。
takahashim

2018/08/12 14:53

> 一つはiphoneメールに送って届かず、2つ目にyahooメールを試したところ、googleのアカウントのセキュリティメールのようなものが届いています。 こちらについてはメールの全文を見てみないとわからないですね…。
seen

2018/08/13 09:29

usersテーブルにカラムが追加されているかの確認はアカウント情報を入力後 $ rails c としてから >User.all でデータベースの中身を確認したところ ID email create_at などのカラムと内容が入っていましたが confirmed_atというカラムが無く、内容が入っていなくてもconfirmed_at nill などと存在すれば表示されるのではないかと思いカラムが無いと判断しました。
seen

2018/08/13 10:24

すみません、gmailの「安全性の低いアプリのアクセス」をonにないといけないところを見落としていました。 再度マイグレイションをやり直してまたコメントさせていただきます。
seen

2018/08/13 10:39

すみません!メールが届きました! クリックするとアプリは開けないのですが、ちょっとリダイレクト先を確認しようと思います。 メール自体は送れるようになり大変感謝しております!  何度もお付き合いいただきましてありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問