Ruby on Rails类

时间:2015-01-05 00:49:21

标签: ruby class ruby-on-rails-4

当创建该类的新对象时,RoR中的类是否会自动启动第一个方法?

class User
 attr_accessor :name, :email

 def initialize(attributes = {})
  @name  = attributes[:name]
  @email = attributes[:email]
 end

 def formatted_email
  "#{@name} <#{@email}>"
 end
end

假设我创建了一个像这样的新用户

connor = User.new(name: "Connor B", email: "CB@example.com")

如何知道自动启动第一个方法,但第二个方法只在被调用时才有效?

2 个答案:

答案 0 :(得分:5)

这不是第一种自动调用的方法,而是new调用initialize,这恰好是大多数代码中的第一种方法看到。但是,您可以将initialize放在类定义的任何位置,而new仍会调用initialize方法。

如果没有明确定义initialize方法,则会调用默认方法。此外,这是一个Ruby行为, Ruby on Rails行为,只是为了澄清。

这里有related Q&A你可能会觉得很有启发性。最上面的答案显示了一个更详细解释它的例子,并深入探讨了幕后实际发生的事情。

答案 1 :(得分:1)

当创建该类的新对象时,Ruby会自动调用initialize方法。

new调用initialize方法。

Reference