2010-08-06 155 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的对象的构造函数):]