在Rails中创建的类的initialize
方法在哪里?
例如,我可以使用以下代码创建一个新类。
rails g model User
rake db:migrate
现在我有/models/user.rb
个User
类。
class User < ActiveRecord::Base
end
但是从研究Ruby开始,我认为所有类都需要使用initialize
方法进行初始化。
class User
def initialize()
end
end
但是我从未在Rails中看到过这种情况。 Rails如何解决这个问题?
(目前正在使用Rails 4。)
答案 0 :(得分:5)
该类继承自ActiveRecord::Base
。 https://github.com/rails/rails/blob/master/activerecord/lib/active_record/base.rb
此课程包含大量其他文件。包括一个名为core
的模块,它定义了初始化。
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/core.rb#L312
所以它确实拥有它,但它被隐藏起来。
答案 1 :(得分:2)
构造函数派生自模块ActiveRecord Base class。
有关initializer。
的文档构造函数详细信息
permalink #initialize(attributes = nil) ⇒ Base
可以将新对象实例化为空(传递无构造参数)或使用属性预先设置但尚未保存(传递具有与关联表列名匹配的键名的哈希)。在这两种情况下,有效的属性键由关联表的列名确定 - 因此您不能拥有不属于表列的属性。
答案 2 :(得分:2)
但是从研究Ruby开始,我认为所有类都需要
initialized
和初始化方法。
您不必定义initialize
方法。这是一个非常有效的Ruby类:
class Foo
end
当然,我可以创建实例:
foo = Foo.new
#=> #<Foo:0x007fa814243ad8>
但Foo
确实有initialize
方法,它继承自BasicObject
:
Foo.instance_method(:initialize)
#=> #<UnboundMethod: Foo(BasicObject)#initialize>
默认的实现不做任何事,它是一个返回nil
的空方法。