使用活动记录,我们可以访问类似
方法访问
user = User.find(1)
user.name #=> 'John'
或
哈希访问
user[:name] #=> 'John'
我只是想知道何时使用哪个,或者是否有任何最佳实践? 就我个人而言,我更喜欢method access
因为我觉得这更像是红宝石的方式。但是,当我看到其他人的代码时,我面临着hash access
.
Rails 约定是使用 ActiveRecord::AttributeMethods::Read#read_attribute
(点表示法),而不是其别名 ActiveRecord::AttributeMethods#[]
,它:
返回由后面的
attr_name
标识的属性的值 已进行类型转换(例如,日期列中的“2004-12-12”
已强制转换 到日期对象,如Date.new(2004, 12, 12)
)。它提高了ActiveModel::MissingAttributeError
标识的属性是否为 失踪。
我强烈建议不要使用括号表示法,因为它会破坏方法调用的继承层次结构并使重构更加困难。
如果我的模型有一个属性name
,并且我决定每次有人阅读它时都要增强名称,那么一种非常惯用的方法是:
def name
"Awesome #{super}!"
end
我的应用程序中任何使用方法版本的地方都可以正常工作,任何使用[]
表示法的地方都会返回原始数据库数据。我可以覆盖[]
,但随后我需要特殊条件检查特定属性。整件事将是一场噩梦。
另一种情况是,假设我有一个曾经存储在数据库中的属性,但过了一段时间,决定应该动态计算它,并最终删除数据库列。使用方法版本,我需要做的就是将方法添加到我的模型中。使用[]
符号,该过程将更加困难。
此外,[]
提供了微不足道的性能改进,因此尽管看起来它"更接近"原始数据,但实际上并非如此。