1

问题与Rails 教程有关。特别是我对清单 6.23有疑问,这一行:

before_save { |user| user.email = email.downcase }

我对变量“email”很好奇——它从何而来?调用左侧变量是某种简短的 Ruby 语法吗?还是它调用模型的属性(虽然它会使传递块变量变得多余)?

我会很感激任何能让我摆脱困惑的人。

4

2 回答 2

3

是的,您可以省略将用户传递给块

before_save { self.email = email.downcase }

我个人不喜欢使用块并为此编写命名方法

before_save :reformat_email


private
def reformat_email
  self.email = email.downcase
end
于 2012-11-25T20:35:40.257 回答
1

这仅在示例中与在 ActiveRecord::Base 类中使用 before_save 的示例user相同时才有效self

email是 的缩写user.email,但是当分配一个你不能使用的值时email =,你必须这样做,user.email =否则你只会分配给一个局部变量。

user.email这个例子正在改变什么user.email.downcase

而且我认为,当您将 abefore_save与论点一起使用时,它将self在该论点中

于 2012-11-25T20:34:52.623 回答