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

时间:2014-08-15 18:00:19

标签: ruby-on-rails

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

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 个答案:

答案 0 :(得分:1)

一个区别在于,在选项(1)中,一旦分配了username属性,它就会小写,而使用选项(2),在保存记录之前不会转换它。因此,如果username的值影响保存之前发生的其他步骤,则选项(1)可能更好。

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

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

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