Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails don';我不理解RailsCast教程中的一些代码_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails don';我不理解RailsCast教程中的一些代码

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

我看了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
  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]=
有一个设置用户列的窗口