在Michael Hartl教程的第8章中,我们设置了登录页面并在数据库中创建了一个新列以保存基本64字符串。在教程中,它被称为remember_token。在user.rb中:
private
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end
self有一个名为remember_token的属性?这是内置的还是在其他地方创建的?也许我只是不太了解这一点。
他写道:
由于Active Record基于的方式合成属性 数据库列,没有自己的赋值将创建一个本地 变量叫remember_token,这根本不是我们想要的。运用 self确保赋值设置用户的remember_token以便它 将在何时与其他属性一起写入数据库 用户已保存。
我很困惑,用户是如何获得记忆令牌的?如何将其写入该特定列中的数据库?
在user.rb中,您有以下代码:
attr_accessible :name, :email, :password, :password_confirmation
那里没有关于remember_token的信息。如何在User.save中包含此内容?
答案 0 :(得分:1)
在此上下文中,self
是一个User对象,由于Section 8.2.1 Ruby on Rails Tutorial中的迁移创建了数据库列,因此它具有remember_token
属性。 (预先self
是分配属性所必需的;没有self
,Ruby只会创建一个名为remember_token
的本地变量。)
答案 1 :(得分:0)
截至2018年,@remember_token
具有访问器方法。
class User < ApplicationRecord
attr_accessor :remember_token
before_save { self.email = email.downcase }
...
# Remembers a user in the database for use in persistent sessions.
def remember
self.remember_token = User.new_token
update_attribute(:remember_digest, User.digest(remember_token))
end
...
数据库中没有remember_token
列。这是一个“虚拟”属性。记住标记作为remember_digest
作为哈希存储。