2010-08-06 160 views
1

我不知道如何在模型中保存信息之前初始化信息。Ruby - 初始化模型

例如。我有一個名爲Car的模型,它具有wheel_size,color等屬性... 我想根據每輛新車的其他因素初始化這些屬性。

這就是我現在要做的。

Class Car < ActiveRecord::Base 

    before_save :initial_information 

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

end 
+1

檢查此SO上的帖子:http://stackoverflow.com/questions/328525/what-is-the-best-way-to-set-default-values-in-activerecord – 2010-08-06 18:22:58

回答

3

after_initialize

將是最好的生命週期掛鉤

+0

爲什麼它是最好的生命週期鉤子。什麼是鉤子? – s84 2010-08-06 19:40:39

+0

我猜想,因爲這是選定的答案,你找出生命週期鉤子是什麼? – 2010-08-07 13:26:40

1

你想盡早做這個初始化;理想情況下,立即在您所依賴的信息被設置後。我建議爲這些值依賴的屬性編寫自定義setter方法,並在那裏初始化它們。

所以,像這樣:

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

或者,如果這些數值可以從變量來直接計算,這是更好只需使用普通的方法。

def color 
    return self.value1 
end 
+0

什麼時候這些值被設置? – s84 2010-08-06 18:48:58

+0

我每次通過setter改變'value1'的值時,我給出的第一種方法都會設置'color'。例如,在調用'model.value1 =「foo」'後,'model.color'的值會立即變爲'「foo」'。 – 2010-08-06 21:44:47

0

通過做after_initialize :mymethod 你的方法mymethod將被調用初始化後(這是Ruby的對象的構造函數):]