Как создать экземпляр хэша для объектов (ruby) - PullRequest
0 голосов
/ 31 октября 2018

В настоящее время я изучаю Ruby и у меня третий день практики, но у меня проблемы с классами и предметами.

escribe Recipe do
it 'Instance an object of type recipe' do
recipe = Recipe.new(title: 'Feijoada',
                    description: 'Você nunca comeu uma receita igual',
                    ingredients: 'Feijão e Carnes',
                    cook_time: 80,
                    featured: true)

expect(recipe.class).to eq Recipe
expect(recipe.title).to eq 'Feijoada'
expect(recipe.description).to eq 'Você nunca comeu uma receita igual'
expect(recipe.ingredients).to eq 'Feijão e Carnes'
expect(recipe.cook_time).to eq 80
expect(recipe.featured).to eq true
end

Как правильно инициализировать каждый хэш таким образом, чтобы при его возврате он был читабельным? Запустив rspec, я получаю «NoMethodError: неопределенный метод» - для nil: NilClass »

Это мой текущий код класса:

class Recipe
require 'json'
attr_accessor :title, :description, :ingredients, :cook_time, :featured

def initialize(arr)
    @title = arr[:title]
    @description - arr[:description]
    @ingredients = arr[:ingredients]
    @cook_time = arr[:cook_time]
    @featured = arr[:featured]
end

def self.from_json(path)
    arquivo = File.read(path)
    recipe = JSON.parse(arquivo)
end
end

1 Ответ

0 голосов
/ 31 октября 2018

Это ваша проблема ... вы ставите минус вместо равных

@description - arr[:description]

Поскольку переменные экземпляра, такие как @description, до инициализации равны nil, вы пытаетесь запустить метод - для объекта nil, который точно объясняет ваше сообщение об ошибке.

...