问题在于Rails tutorial。特别是我怀疑listing 6.23,这一行:
before_save { |user| user.email = email.downcase }
我对变量“email”感到好奇 - 它来自哪里?调用左侧变量是一种简短的Ruby语法吗?或者它是否调用模型的属性(它会使块变量传递多余)?
我很感激有人让我感到困惑。
答案 0 :(得分:3)
是的,您可以省略将用户传递到块
before_save { self.email = email.downcase }
我个人不喜欢使用块并为此
编写命名方法before_save :reformat_email
private
def reformat_email
self.email = email.downcase
end
答案 1 :(得分:1)
仅当示例中的user
与self
相同且关于在ActiveRecord :: Base类中使用before_save的示例时才有效
email
是user.email
的缩写,但在分配值时,您无法使用email =
,您必须执行user.email =
,否则您只会分配给局部变量
示例正在将user.email
中的内容更改为user.email.downcase
我认为当你使用带有参数的before_save
时,该参数中的self