2010-05-17 115 views
3

我有一个完成的:布尔列的模型,我想重写,所以我可以添加一些条件代码。覆盖一个ActiveRecord属性

我从来没有重写过ActiveRecord属性,并想知道下面的方法是否是好的做法?

class Article < ActiveRecord::Base 
    def completed=(b) 
    write_attribute(:completed, b) 
    # IF b is true then do something 
    end 
end 

回答

3

你的方法很好。你建议的方法是在ActiveRecord documentation描述(向下滚动到标题覆写默认存取)的一个

一个不过,我想补充一点,是取决于你的情况具体你可以到在使用before_save回调作为替代方案后,实现您的目标。

+0

我会使用'self [:completed] = b'而不是'write_attribute',它只是感觉整洁。 – 2010-05-17 21:44:56

+1

是的,ActiveRecord的'[]'和'[] ='分别只是'read_attribute'和'write_attribute'的包装,所以使用哪一个更自然。 – mikej 2010-05-17 22:14:39