🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

1146閲覧

変数attributeが空になってしまう

majikadezou

総合スコア34

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2019/12/14 06:06

class AccountActivationsController < ApplicationController def edit user = User.find_by(email: params[:email]) if user && !user.activated? && user.authenticated?(:activation, params[:id]) user.activate user.update_attribute(:activated_at, Time.zone.now) log_in user flash[:success] = "へようこそ" redirect_to user else flash[:danger] = "アクティベーションに失敗しました" redirect_to root_url end end end

↑でauthenticated? に渡されている 引数:activation が

model/user.rb def authenticated?(attribute, token) digest = send("#{attribute}_digest") return false if digest.nil? BCrypt::Password.new(digest).is_password?(token) end

↑のコードに反映されず、

エラーコード Failure/Error: digest = send("#{attribute}_digest") NoMethodError: undefined method ` _digest' for #<User:0x00007fea1e010fa8> # ./app/models/user.rb:32:in `authenticated?' # ./spec/models/user_spec.rb:134:in `block (4 levels) in <main>'

となってしまいます。
"#{attribute}_digest"のattribute部分が正しく読み取られていないのだと思いますが、原因が分かりません。
どなたか解決方法が分かる方はいらっしゃいますか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

NoMethodError: undefined method ` _digest' for #<User:0x00007fea1e010fa8> # ./app/models/user.rb:32:in `authenticated?' # ./spec/models/user_spec.rb:134:in `block (4 levels) in <main>'

user_spec.rb:134行目からuser.rbへ直接飛んだように見えますが
user_spec.rb:134付近はどうなっているのでしょうか?

投稿2019/12/14 06:55

asm

総合スコア15149

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

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

majikadezou

2019/12/14 07:37

describe "authenticated?" do it "remember_digestがnilなら即座に認証を終了させること" do expect(user.authenticated?(' ',' ')).to be_falsey end end 回答ありがとうございます。 このようになっています。 specの書き方が見違っているのでしょうか
asm

2019/12/14 07:46

引数 :activation 関係ないですね。 > "remember_digestがnilなら即座に認証を終了させること" が正しいのならば expect(user.authenticated?(:remember, '').to be_falsy かと思います
majikadezou

2019/12/14 08:21

なるほど! ありがとうございます! 解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問