繁体   English   中英

Rails 4:在保存之前更改模型中的数据

[英]Rails 4: Changing data in model before saving

我刚刚阅读了以下两个问题的答案:如何更改将要保存的对象的参数(在模型中)?

1)

class User < ActiveRecord::Base
  def username=(val)
    write_attribute(:username, val.downcase)
  end
end

2)

before_save do
  self.username = self.username.downcase
end

谁能因各种原因评估一种解决方案是否比另一种“更好”? 还是可以将它们视为“相同”?

感谢大伙们!

区别在于,在选项(1)中,用户名属性一经分配便立即变为小写,而在选项(2)中,直到保存记录后才转换。 因此,如果用户名的值影响保存之前发生的其他步骤,则选项(1)可能更可取。

另外,我发现选项(1)在可读性/可维护性方面更好,因为很明显代码直接与用户名的分配有关。 在选项(2)中,这有点隐含。

旁注:您可能应该检查nil,因为如果为用户名分配了nil值,则上面的代码将导致错误(由于在nil上调用了downcase ):

class User < ActiveRecord::Base
  def username=(val)
    val = val.downcase unless val.nil?
    write_attribute(:username, val)
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM