2011-08-29 91 views
0

我正在使用after_initialize回調函數初始化我的模型的某些屬性,但是當從數據庫加載記錄時覆蓋保存的值時會調用此回調函數。這裏是模型:正在初始化ActiveRecord模型

class Post < ActiveRecord::Base 
    serialize :tags 

    after_initialize :init_tags 

    def init_tags 
    write_attribute :tags, [] 
    end 
end 

有沒有辦法做到這一點不改變回調

def init_tags 
    if not read_attribute :tags 
     write_attribute :tags, [] 
    end 
    end 

回答

0

做這樣的:

class Post < ActiveRecord::Base 
    serialize :tags 

    after_initialize :init_tags 

    def init_tags 
    self.tags ||= [] 
    end 
end 

即相當於你的第二個解決方案,只有短一點。 save方法沒有被調用,但它不應該是一個問題,因爲這隻會在模型的第一次初始化時使用,之後會填充該值。