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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

1250閲覧

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

ryuryuryu

総合スコア1

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿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版です。

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

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

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

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

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

guest

回答2

0

自己解決

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

投稿2022/12/19 13:59

ryuryuryu

総合スコア1

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

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

0

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

投稿2022/12/19 09:42

winterboum

総合スコア23464

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

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

ryuryuryu

2022/12/19 13:06

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.41%

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

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

質問する

関連した質問