Ruby on rails don';我不理解RailsCast教程中的一些代码
我看了RailCasts教程#274关于记住我并重置密码。他添加的代码如下Ruby on rails don';我不理解RailsCast教程中的一些代码,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我看了RailCasts教程#274关于记住我并重置密码。他添加的代码如下user.rb中所示 def send_password_reset generate_token(:password_reset_token) save! UserMailer.password_reset(self).deliver end def generate_token(column) begin self[column] = SecureRandom.urlsafe_base64
user.rb中所示
def send_password_reset
generate_token(:password_reset_token)
save!
UserMailer.password_reset(self).deliver
end
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
这里我不明白的是为什么保存代码>呼叫内部发送密码\u重置
?另外,我不熟悉generate_-token
:self[column]=
中的语法。这是在数据库表中设置列的方法吗
以下是重置密码\u控制器的创建
操作
def create
user = User.find_by_email(params[:email])
user.send_password_reset if user
redirect_to root_path, notice: "Email sent with password reset instructions."
end
保存代码>保存对象并在失败时引发异常
self[column]=
,是一种轻微的元编程
通常,当您知道列名时,您会这样做:self.password\u reset\u token=
。这与self[:password\u reset\u token]=
或self[“password\u reset\u token”]=
相同
因此,将列名作为字符串/符号传递很容易将其抽象出来
更清晰?保存代码>保存对象并在失败时引发异常
self[column]=
,是一种轻微的元编程
通常,当您知道列名时,您会这样做:self.password\u reset\u token=
。这与self[:password\u reset\u token]=
或self[“password\u reset\u token”]=
相同
因此,将列名作为字符串/符号传递很容易将其抽象出来
更清晰?1)保存
类似于save
,但如果记录无效,则引发RecordInvalid
异常,而不是返回false
我的控制台中的示例:
User.new().save # => false
User.new().save! # ActiveRecord::RecordInvalid: Validation failed: Password can't be blank, Email can't be blank
2) self[column]=
用于设置用户列。1)保存
类似于save
,但如果记录无效,则引发RecordInvalid
异常,而不是返回false
我的控制台中的示例:
User.new().save # => false
User.new().save! # ActiveRecord::RecordInvalid: Validation failed: Password can't be blank, Email can't be blank
2) self[column]=
有一个设置用户列的窗口