Rails:before_save 变量内容

Posted

技术标签:

【中文标题】Rails:before_save 变量内容【英文标题】:Rails: before_save variable contents 【发布时间】:2012-11-01 23:29:47 【问题描述】:

我正在阅读有关 Rails 的指南,并且在 Model 类中遇到了这一行:

before_save  |user| user.email = email.downcase 

这是为了确保电子邮件地址在进入数据库之前是小写的(但你已经知道了,因为你们很聪明!)。

但是,为什么不只拥有这个:

before_save  |user| user.email.downcase! 

执行起来不是更简单,还是我遗漏了什么?

【问题讨论】:

我也有同样的问题。谢谢! @KMcA 使用 Michael Hartl 指南? 是的。到目前为止真的很享受。 @KMcA 好!我也是。确保保存它。这将是一个很大的帮助,并且在未来更有意义。 Rails for Zombies 也是一个很好的资源。 是的,我已经完成了 Zombies1,并且正在他们本周末的免费演示中制作 Zombies2。感谢您的建议。其实我已经打算再读一遍了。我读过的最好的网络书,但我才 6 个月,所以比较可能不太公平。 【参考方案1】:

两者都做同样的事情......只是归结为口味。

【讨论】:

两者都不是更理想的吗?我认为那个必须访问内存中的第二个位置,因此速度较慢。 这真的很难说,因为它在很大程度上取决于您运行的 Ruby VM 是如何实现的。请记住,有些 VM 具有像 JavaVM 这样的不可变字符串(至少我认为is) 所以任何像上面这样的字符串操作都必须在字符串周围复制.. 我也不担心这些优化。还有其他事情需要担心,这会比字符串花费更多的性能(如 N+1 或其他容易犯的错误)是否被复制:) 好的。谢谢你的澄清。我实际上是假设 Ruby 中的所有 String 对象都是可变的。 这在很大程度上取决于您正在运行的 VM。MRI 中可能会出现这种情况,但 JRuby 中绝对不会。

以上是关于Rails:before_save 变量内容的主要内容,如果未能解决你的问题,请参考以下文章

Rails :before_save 大写私有方法

Rails:before_save - 堆栈级别太深

带有 MD5 摘要的 Rails 模型 before_save

Ruby on Rails:before_save 字段为小写

我如何在 Rails 3 的控制器中获取 before_save 值?

Rails Rspec / Factory Bot没有调用模型before_save回调