我正在尝试找到模型'new
方法的来源。我尝试将source_location
与ActiveRecord :: Base.new一起使用,并使用Widget.new(其中Widget是模型),然后执行
find . -name *rb -exec grep -il "def new$" {} \;
在activerecord gem目录中,但没有运气。
答案 0 :(得分:0)
当通过.new
实例化Ruby对象时,它通常运行对象的initialize
方法。默认情况下,这是在Class
上定义的:
1.9.3p327 :002 > ActiveRecord::Base.method(:new)
=> #<Method: Class#new>
如果要为Rails模型创建自定义初始值设定项,只需定义initialize
方法即可。请注意,这有一些注意事项,因为initialize
并不一定总是由ActiveRecord调用。您可能最好不要添加after_initialize回调。
有关查找方法定义位置以及new
和initialize
相关方式的更多有用信息,请参阅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?。