Ruby on rails 在Ruby/Rails中保存之前的理解
在上面的一行中,我认为在保存之前是一种方法。但将其更改为以下选项会使其无法工作:Ruby on rails 在Ruby/Rails中保存之前的理解,ruby-on-rails,ruby,Ruby On Rails,Ruby,在上面的一行中,我认为在保存之前是一种方法。但将其更改为以下选项会使其无法工作: before_save { self.email = email.downcase } 发生了什么事?它不是一种方法吗?在保存之前,它是一种方法,用于执行代码块,例如原始文章中的第一个代码示例 如果您不想在一个块中执行代码,可能您需要的对于一个简单的块来说太长了,那么您也可以使用这个回调来调用/执行您自己设计的方法,如下例所示 before_save({ self.email = email.downcase})
before_save { self.email = email.downcase }
发生了什么事?它不是一种方法吗?
在保存之前,它是一种方法,用于执行代码块,例如原始文章中的第一个代码示例
如果您不想在一个块中执行代码,可能您需要的对于一个简单的块来说太长了,那么您也可以使用这个回调来调用/执行您自己设计的方法,如下例所示
before_save({ self.email = email.downcase})
对于您所展示的示例(在保存之前将电子邮件压缩),我的感觉是块方法比方法调用更好 我想澄清一下,因为我觉得公认的答案根本没有解决这个问题,在保存绝对是一种方法之前。代码无法工作的原因并不是因为prefore\u save不是一个方法,而是因为在Ruby中,块没有作为参数传递给方法,而是在方法之后。如果你写:
before_save :my_awesome_pre_save_method
# somewhere in your model (typically in a protected method)
protected
def my_awesome_pre_save_method
self.email.downcase!
end
这应该没有问题。在我看来,两个答案都很好。我认为你也应该得到一张赞成票。@SergioA。谢谢。我希望我的回答不会让人觉得我忽略了另一个问题,它肯定有有用的信息,我只是想确保原始问题中“这不是一种方法”的具体部分得到了解决。
before_save() { self.email = email.downcase }