在模型中使用 belongs_to.attribute 和 belongs_to[:attribute] 有什么区别?



下面的方法是否有可能产生不同的值,比如因为缓存或其他原因?

class User < ActiveRecord::Base
belongs_to :school
def first_value
school.name
end
def second_value
school[:name]
end
end

通常,按属性名称调用属性和使用[]方法没有区别,因为属性名称getter方法在内部使用[]方法。因此,两者都会在该属性被类型化后返回该属性的值。

但是,当应用程序中的属性getter方法被覆盖时,这两种方法之间可能存在差异。想象一下,该方法被这样的覆盖

def name
self[:name].presence || 'N.N.'
end

如果学校有名称,则school.name将返回学校的,但如果名称为空,则返回字符串'N.N.'。而school[:name]仍然会返回数据库中的原始值,这意味着如果学校名称没有设置,它仍然会返回nil

最新更新