前提
コンソールを開き、データベースにある最初のユーザーを変数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件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。