Ruby on rails 重写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 类文章

我有一个带有completed:boolean列的模型,我希望覆盖它,以便添加一些条件代码

我以前从未重写过ActiveRecord属性,我想知道下面的方法是否是一种好的做法

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属性
的包装,所以使用你觉得更自然的。