Ruby on rails 重写ActiveRecord属性
我有一个带有completed:boolean列的模型,我希望覆盖它,以便添加一些条件代码 我以前从未重写过ActiveRecord属性,我想知道下面的方法是否是一种好的做法Ruby on rails 重写ActiveRecord属性,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有一个带有completed:boolean列的模型,我希望覆盖它,以便添加一些条件代码 我以前从未重写过ActiveRecord属性,我想知道下面的方法是否是一种好的做法 class Article < ActiveRecord::Base def completed=(b) write_attribute(:completed, b) # IF b is true then do something end end 类文章
class Article < ActiveRecord::Base
def completed=(b)
write_attribute(:completed, b)
# IF b is true then do something
end
end
类文章
你的方法很好。您建议的方法如中所述(向下滚动至标题覆盖默认访问器)
然而,我要补充的一点是,根据您的具体情况,在使用回调作为替代方法后,您可能能够实现您的目标。我将使用
self[:completed]=b
而不是write\u属性
,它只是感觉更整洁。是的,ActiveRecord的[]
和[]=
只是分别围绕read\u属性
和write\u属性
的包装,所以使用你觉得更自然的。