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

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

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

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

Ruby on Rails

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

Q&A

解決済

railsチュートリアル 9章 演習

ryuryuryu
ryuryuryu

総合スコア1

Ruby

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

Ruby on Rails

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

2回答

0グッド

0クリップ

255閲覧

投稿2022/12/19 09:15

前提

コンソールを開き、データベースにある最初のユーザーを変数userに設定してください。その後、そのuserオブジェクトからrememberメソッドがうまく動くかどうか確認してみましょう。また、remember_tokenとremember_digestの違いも確認してみてください。

上記の演習でコンソールで"user.remember"と入力した結果がtrueにならない。

実現したいこと

"user.remember"を入力時、trueにしたいです。

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

/home/ubuntu/.rvm/gems/ruby-3.1.2/gems/activemodel-7.0.4/lib/active_model/attribute_methods.rb:458:in `method_missing': undefined method `remember' for #<User id: 1, name: "Rails Tutorial", email: "example@railstutorial.org", created_at: "2022-12-17 07:15:30.004589000 +0000", updated_at: "2022-12-17 07:15:30.004589000 +0000", password_digest: [FILTERED], remember_digest: nil> (NoMethodError) Did you mean? remember_digest

該当のソースコード

user.rb

1class User < ApplicationRecord 2 attr_accessor :remember_token 3 before_save { email.downcase! } 4 validates :name, presence: true, length: { maximum: 50 } 5 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i 6 validates :email, presence: true, length: { maximum: 255 }, 7 format: { with: VALID_EMAIL_REGEX }, 8 uniqueness: true 9 has_secure_password 10 validates :password, presence: true, length: { minimum: 6 } 11 12 # 渡された文字列のハッシュ値を返す 13 def User.digest(string) 14 cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : 15 BCrypt::Engine.cost 16 BCrypt::Password.create(string, cost: cost) 17 end 18 19 # ランダムなトークンを返す 20 def User.new_token 21 SecureRandom.urlsafe_base64 22 end 23 24 # 永続セッションのためにユーザーをデータベースに記憶する 25 def remember 26 self.remember_token = User.new_token 27 update_attribute(:remember_digest, User.digest(remember_token)) 28 end 29end

試したこと

rememberがないと言われているので、他の方のコードをコピペしましたが変わりませんでした。

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

第7版です。

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

0

自己解決

時間が経ってもう一度やってみると正常に動作しました

投稿2022/12/19 13:59

ryuryuryu

総合スコア1

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

そりゃ、def remember が無いのだから NoMethodError ですね。
演習 のどこかに、 def remember を設定する所があるのでは?

投稿2022/12/19 09:42

winterboum

総合スコア22707

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

ryuryuryu

2022/12/19 13:06

def rememberは書いていますがuser.rbでは意味がないと言う意味でしょうか?

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby

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

Ruby on Rails

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