2010-05-31 4 views
2

j'ai un modèle IncomingEmail avec un attribut virtuel attachments:Initialiser attributs virtuels

class IncomingEmail < ActiveRecord::Base 
    attr_accessor :attachments 
end 

Je veux l'attribut virtuel attachments à initialiser à [] plutôt que nil pour que je puisse faire:

>> i = IncomingEmail.new 
=> #<IncomingEmail id: nil,...) 
>> i.attachments << "whatever" 

Sans le premier paramètre i.attachments à [] (en d'autres termes, je souhaite que cet attribut virtuel soit défini par défaut sur un tableau vide au lieu de nil)

Répondre

3

utilisation after_initialize rappel

class IncomingEmail < ActiveRecord::Base 
    attr_accessor :attachments 
    def after_initialize 
    self.attachments ||= [] # just in case the :attachments were passed to .new 
    end 
end 
+0

oui, et ne remplacent pas par défaut initialiseur ActiveRecord – allenwei