Ответ 1
Ruby использует метод initialize
как конструктор объекта. Это часть языка Ruby, не относящаяся к структуре Rails. Он вызывается, когда вы создаете новый объект, например:
@person = Person.new
Вызов метода класса new
на уровне Class
выделяет тип этого класса, а затем вызывает метод initialize
:
http://www.ruby-doc.org/core-1.9.3/Class.html#method-i-new
Все объекты имеют метод initialize
по умолчанию, который не принимает никаких параметров (вам не нужно писать один - вы получите его автоматически). Если вы хотите, чтобы ваш объект делал что-то другое в методе initialize
, вам нужно определить его собственную версию.
В вашем примере вы передаете хэш методу initialize
, который может использоваться для установки значения по умолчанию @name
и @email
.
Вы используете это, например:
@person = Person.new({name: 'John Appleseed', email: '[email protected]'})
Причина, по которой инициализатор имеет значение по умолчанию для атрибутов (attributes = {}
устанавливает значение по умолчанию для хэша aute - {}
), так что вы также можете вызвать его, не передавая аргумент. Если вы не укажете аргумент, то attributes
будет пустым хешем, и поэтому значения @name
и @email
будут nil
, поскольку для этих ключей не существует значения (:name
и :email
).