Model.new方法在哪里定义?

时间:2013-03-12 23:34:24

标签: ruby-on-rails model

我正在尝试找到模型'new方法的来源。我尝试将source_location与ActiveRecord :: Base.new一起使用,并使用Widget.new(其中Widget是模型),然后执行

find . -name *rb -exec grep -il "def new$" {} \;

在activerecord gem目录中,但没有运气。

1 个答案:

答案 0 :(得分:0)

当通过.new实例化Ruby对象时,它通常运行对象的initialize方法。默认情况下,这是在Class上定义的:

1.9.3p327 :002 > ActiveRecord::Base.method(:new)
=> #<Method: Class#new>

如果要为Rails模型创建自定义初始值设定项,只需定义initialize方法即可。请注意,这有一些注意事项,因为initialize并不一定总是由ActiveRecord调用。您可能最好不要添加after_initialize回调。

有关查找方法定义位置以及newinitialize相关方式的更多有用信息,请参阅How to find where a method is defined at runtime?In Ruby, what's the relationship between 'new' and 'initialize'? How to return nil while initializing?