Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.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 在Ruby/Rails中保存之前的理解_Ruby On Rails_Ruby - Fatal编程技术网

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 }