如何在ActiveRecord回调中设置属性?

时间:2010-09-04 09:34:36

标签: ruby-on-rails activerecord

这似乎是一个非常简单的问题...但是看哪:)

Geek name:string
Laser geek_id:integer, power:integer

Geek
 has_one :Laser
end

Laser
 belongs_to :Geek
end

很简单,对吧?

现在我想在创建一个极客之后创建激光,所以新的Geek模型看起来像这样

Geek 
 has_one :laser
 after_create :create_laser
end

这非常好用,但我也想为激光的power属性传递一个默认值,那我该怎么做呢?

after_create:create_laser(:power => 5000)

不起作用:(但看起来不错:)。

有没有人为此提供一个漂亮而优雅的解决方案?

1 个答案:

答案 0 :(得分:1)

当然可以。

如您所知,您的回调只是方法名称。因此,您可以在此处调用另一种方法来设置和创建具有一些默认参数的激光,而不是在此处使用create_laser。我们称之为setup_laser并像这样使用它:

before_create :setup_laser

我们在Geek模型中定义它:

private

def setup_laser
  create_laser(:power => 5000)
end