2010-08-06 5 views
1

Je ne sais pas comment initialiser les informations d'un modèle avant qu'il ne soit sauvegardé.Ruby - Initialisation d'un modèle

Par exemple. J'ai un modèle appelé Car, et il a les attributs wheel_size, couleur, etc ... Je veux initialiser ces attributs en fonction d'autres facteurs pour chaque nouvelle voiture.

Voici comment je le fais en ce moment.

Class Car < ActiveRecord::Base 

    before_save :initial_information 

    def initial_information 
     self.color = value1 
     self.wheel_size = value2 
    end 

end 
+1

Vérifiez ce post sur SO: http://stackoverflow.com/questions/328525/what-is-the-best-way-to-set-default-values-in-activerecord –

Répondre

3

after_initialize

serait le meilleur crochet du cycle de vie

+0

pourquoi est-ce le meilleur crochet de cycle de vie. Qu'est-ce qu'un crochet? – s84

+0

Je suppose que puisque c'était la réponse choisie, vous avez compris ce qu'est un crochet de cycle de vie? –

1

Vous souhaitez effectuer cette initialisation le plus tôt possible; idéalement immédiatement après que l'information dont vous dépendez est définie. Je vous recommande d'écrire des méthodes de définition personnalisées pour les attributs dont ces valeurs dépendent et de les initialiser ici.

Donc, quelque chose comme:

def value1=(new_value1) 
    self["value1"] = new_value1 
    self.color = new_value1 
end 

Par ailleurs, si ces valeurs peuvent être directement calculées à partir des variables dépendantes, il est préférable d'utiliser un autre mode normal.

def color 
    return self.value1 
end 
+0

Quand ces valeurs sont-elles définies? – s84

+0

La première approche que j'ai donnée va définir 'color' chaque fois que vous changez la valeur de' value1' via le setter. Par exemple, après avoir appelé 'model.value1 =" foo "', la valeur de 'model.color' serait immédiatement' 'foo" '. –

0

en faisant un after_initialize :mymethod votre méthode mymethod sera appelée après l'initialisation (qui est le constructeur dans les objets de rubis):]