问题与Rails 教程有关。特别是我对清单 6.23有疑问,这一行:
before_save { |user| user.email = email.downcase }
我对变量“email”很好奇——它从何而来?调用左侧变量是某种简短的 Ruby 语法吗?还是它调用模型的属性(虽然它会使传递块变量变得多余)?
我会很感激任何能让我摆脱困惑的人。
是的,您可以省略将用户传递给块
before_save { self.email = email.downcase }
我个人不喜欢使用块并为此编写命名方法
before_save :reformat_email
private
def reformat_email
self.email = email.downcase
end
这仅在示例中与在 ActiveRecord::Base 类中使用 before_save 的示例user
相同时才有效self
email
是 的缩写user.email
,但是当分配一个你不能使用的值时email =
,你必须这样做,user.email =
否则你只会分配给一个局部变量。
user.email
这个例子正在改变什么user.email.downcase
而且我认为,当您将 abefore_save
与论点一起使用时,它将self
在该论点中