我正在尝试覆盖ActiveRecord模型的getter方法。我name
在模型中有一个称为的属性Category
,我希望能够执行以下操作:
def name
name_trans || name
end
如果name_trans
attribute不为nil,则返回它,否则返回name
attribute。我该怎么做?
然后通常应这样调用:
@category.name
我正在尝试覆盖ActiveRecord模型的getter方法。我name
在模型中有一个称为的属性Category
,我希望能够执行以下操作:
def name
name_trans || name
end
如果name_trans
attribute不为nil,则返回它,否则返回name
attribute。我该怎么做?
然后通常应这样调用:
@category.name
Answers:
《Rails样式指南》建议使用self[:attr]
over read_attribute(:attr)
。
您可以像这样使用它:
def name
name_trans || self[:name]
end
覆盖getter和using read_attribute
不适用于关联,但是可以alias_method_chain
代替使用。
def name_with_override
name_trans || name_without_override
end
alias_method_chain :name, :override
name
现在将致电name_with_override
。如果由于某种原因要调用原始方法,可以调用name_without_override
。