Инициализация класса с помощью Faker Gem

Я создал класс, который будет автоматически заполняться данными с помощью faker gem при создании экземпляра класса. У меня проблемы с заполнением объекта Person. Вероятно, это грубая синтаксическая ошибка.

require 'rubygems'
require 'faker' 

class Person
  attr_accessor :firstname , :lastname, :phonenumber, :workaddress, :bio, :email

  def initialize(firstname = Faker::Name.first_name ,
    lastname = Faker::Name.last_name,
    phonenumber = Faker::PhoneNumber.phone_number,
    workaddress = "#{Faker::Address.street_name}, 
        #{Faker::Address.city}, #{Faker::Address.state_abbr}, #{Faker::Address.zip}",
    bio = 'bla bla bla',
    email = Faker::Internet.email)
  end

end

Я запустил приведенный выше код в интерпретаторе Ruby, но мне не удалось инициализировать атрибуты Class. Следующее дает nillClass вместо String.

p = Person.new
puts p.firstname.class

Рабочее решение:

def initialize(firstname = Faker::Name.first_name ,lastname =Faker::Name.last_name,phonenumber = Faker::PhoneNumber.phone_number,workaddress = "#    {Faker::Address.street_name}, #{Faker::Address.city}, #{Faker::Address.state_abbr}, #{Faker::Address.zip}",bio = "#{Lolem.new.words(7)}", email = Faker::Internet.email)
    @firstname = firstname
    @lastname = lastname
    @phonenumber = phonenumber
    @workaddress = workaddress
    @bio = bio
    @email = email
end

person Henry Chinner    schedule 06.05.2013    source источник


Ответы (1)


У вас должен быть код в вашем initialize методе, инициализирующий ваши атрибуты, например:

def initialize(firstname = Faker::Name.first_name, ...)
  @firstname = firstname
  # ...
end

Вы просто инициализируете параметры в методе инициализации и ничего не делаете с ними.

person Pigueiras    schedule 06.05.2013
comment
Спасибо, теперь он работает после добавления @firstname = firstname и остальных переменных. - person Henry Chinner; 07.05.2013