我看到了有关此问题机器人的几个问题,但没有一个对我有帮助。所以问题是,在执行时,如果我检查记住我,我会收到此错误:
“# 的未定义方法`remember_token='”
相关代码:
用户.rb
#Returns a random token.
def User.new_token
SecureRandom.urlsafe_base64
end
# Rememember a user in the database for use in persistent sessions.
def remember
self.remember_token = User.new_token **# This is the row 30 where the execution stops**
update_attribute(:remember_digest, User.digest(remember_token))
end
我已检查数据库是否有列 Remember_digest,因此它不是数据库列。
此代码是从 session_helper.rb 调用的,即从代码:
# Remembers a user in a persistent session.
def remember(user)
user.remember
cookies.permanent[:remember_token] = user.remember_token
cookies.permament.signed[:user_id] = user.id
end
此外,在我的控制台中,如果我输入 User.new_token,控制台会毫无问题地返回新 token 。
最佳答案
Error: "undefined method `remember_token='
您收到此错误是因为用户表没有 Remember_token 字段。
I have checked the database has got the column remember_digest so it's not the database column.
当您使用 self.remember_token = User.new_token
时,您尝试使用 new_token 方法的输出来设置 users 表中的 Remember_token 字段。为什么您认为在将 users 表分配给 Remember_token 时需要有 Remember_digest 字段?
修复
如果你想实现记住我的功能,那么你可以按照这个railscast
。你的代码将是这样的:
#User.rb
#Returns a random token.
def new_token
SecureRandom.urlsafe_base64
end
# Rememember a user in the database for use in persistent sessions.
def remember
self.update_attribute(:remember_digest, new_token)
end
# Remembers a user in a persistent session.
def remember(user)
user.remember
cookies.permanent[:remember_token] = user.remember_digest
cookies.permament.signed[:user_id] = user.id
end
P.S 我正在使用 Remember_digest,因为它已经在您的用户表中。您可以更改它并使用更具描述性的字段,例如remember_token
关于ruby-on-rails - 关注railsturial.org时未定义方法 'remember_token=",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26559857/