ActionView::Template::Error: undefined local variable or method `recipes'
Por favor, preciso de ajuda da comunidade Ruby. Sou recém chegado na linguagem Ruby e no framework Rails. Estou participando da Campus Code e não consigo progredir em um desafio proposto no treinamento. O repositório do projeto baixei em minha máquina virtual VMware com Ubuntu 18.04 e nele consta o projeto em Ruby on Rails e os testes para passar com rspec. Eis os arquivos sensíveis para concluir o projeto:
home_controller.rb:
class HomeController < ApplicationController
def page
@recipes = Recipe.all
end
end
page.html.erb:
<% if recipes == [] %>
<h1>CookBook</h1>
<p>Bem-vindo ao maior livro de receitas online</p><% else %>
<% @recipes.each do |recipe| %>
<h1><%= recipe.title %></h1>
<li><%= recipe.recipe_type %></li>
<li><%= recipe.cuisine %></li>
<li><%= recipe.difficulty %></li>
<li><%= recipe.cook_time %> minutos</li>
<% end %><% end %>
recipe.rb:
class Recipe < ApplicationRecord
end
routes.rb:
Rails.application.routes.draw do
root to: 'home#page'
resources :recipe
end
E esse é o arquivo de testes visitor_visit_homepage_spec.rb:
require 'rails_helper'
feature 'Visitor visit homepage' do
scenario 'successfully' do
visit root_path
expect(page).to have_css('h1', text: 'CookBook')
expect(page).to have_css('p', text: 'Bem-vindo ao maior livro de receitas'\
' online')
end
scenario 'and view recipe' do
#cria os dados necessários
recipe = Recipe.create(title: 'Bolo de cenoura', recipe_type: 'Sobremesa',
cuisine: 'Brasileira', difficulty: 'Médio',
cook_time: 60)
# simula a ação do usuário
visit root_path
# expectativas do usuário após a ação
expect(page).to have_css('h1', text: recipe.title)
expect(page).to have_css('li', text: recipe.recipe_type)
expect(page).to have_css('li', text: recipe.cuisine)
expect(page).to have_css('li', text: recipe.difficulty)
expect(page).to have_css('li', text: "#{recipe.cook_time} minutos")
end
scenario 'and view recipes list' do
#cria os dados necessários
recipe = Recipe.create(title: 'Bolo de cenoura', recipe_type: 'Sobremesa',
cuisine: 'Brasileira', difficulty: 'Médio',
cook_time: 60)
another_recipe = Recipe.create(title: 'Feijoada',
recipe_type: 'Prato Principal',
cuisine: 'Brasileira', difficulty: 'Difícil',
cook_time: 90)
# simula a ação do usuário
visit root_path
# expectativas do usuário após a ação
expect(page).to have_css('h1', text: recipe.title)
expect(page).to have_css('li', text: recipe.recipe_type)
expect(page).to have_css('li', text: recipe.cuisine)
expect(page).to have_css('li', text: recipe.difficulty)
expect(page).to have_css('li', text: "#{recipe.cook_time} minutos")
expect(page).to have_css('h1', text: another_recipe.title)
expect(page).to have_css('li', text: another_recipe.recipe_type)
expect(page).to have_css('li', text: another_recipe.cuisine)
expect(page).to have_css('li', text: another_recipe.difficulty)
expect(page).to have_css('li', text: "#{another_recipe.cook_time} minutos")
end
end
Passo o comando rspec na pasta do projeto:
:~/workspace/cookbook_parte2$ rspec
Visitor visit homepage
successfully (FAILED - 1)
and view recipe (FAILED - 2)
and view recipes list (FAILED - 3)
Recipe
add some examples to (or delete) /home/massa-90/workspace/cookbook_parte2/spec/models/recipe_spec.rb (PENDING: Not yet implemented)
Pending: (Failures listed here are expected and do not affect your suite's status)
1) Recipe add some examples to (or delete) /home/massa-90/workspace/cookbook_parte2/spec/models/recipe_spec.rb
# Not yet implemented
# ./spec/models/recipe_spec.rb:4
Failures:
1) Visitor visit homepage successfully
Failure/Error: <% if recipes == [] %>
ActionView::Template::Error:
undefined local variable or method `recipes' for #<#<Class:0x0000564c2a9f8630>:0x0000564c2a9f30b8>
Did you mean? @recipes
# ./app/views/home/page.html.erb:1:in `_app_views_home_page_html_erb___526898541735595527_47442566303380'
# ./spec/features/visitor_visit_homepage_spec.rb:5:in `block (2 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# NameError:
# undefined local variable or method `recipes' for #<#<Class:0x0000564c2a9f8630>:0x0000564c2a9f30b8>
# Did you mean? @recipes
# ./app/views/home/page.html.erb:1:in `_app_views_home_page_html_erb___526898541735595527_47442566303380'
2) Visitor visit homepage and view recipe
Failure/Error: <% if recipes == [] %>
ActionView::Template::Error:
undefined local variable or method `recipes' for #<#<Class:0x0000564c2a9f8630>:0x0000564c2a68c0c8>
Did you mean? @recipes
# ./app/views/home/page.html.erb:1:in `_app_views_home_page_html_erb___526898541735595527_47442566303380'
# ./spec/features/visitor_visit_homepage_spec.rb:19:in `block (2 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# NameError:
# undefined local variable or method `recipes' for #<#<Class:0x0000564c2a9f8630>:0x0000564c2a68c0c8>
# Did you mean? @recipes
# ./app/views/home/page.html.erb:1:in `_app_views_home_page_html_erb___526898541735595527_47442566303380'
3) Visitor visit homepage and view recipes list
Failure/Error: <% if recipes == [] %>
ActionView::Template::Error:
undefined local variable or method `recipes' for #<#<Class:0x0000564c2a9f8630>:0x0000564c2a4b2cc0>
Did you mean? @recipes
# ./app/views/home/page.html.erb:1:in `_app_views_home_page_html_erb___526898541735595527_47442566303380'
# ./spec/features/visitor_visit_homepage_spec.rb:41:in `block (2 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# NameError:
# undefined local variable or method `recipes' for #<#<Class:0x0000564c2a9f8630>:0x0000564c2a4b2cc0>
# Did you mean? @recipes
# ./app/views/home/page.html.erb:1:in `_app_views_home_page_html_erb___526898541735595527_47442566303380'
Finished in 0.34634 seconds (files took 2.17 seconds to load)
4 examples, 3 failures, 1 pending
Failed examples:
rspec ./spec/features/visitor_visit_homepage_spec.rb:4 # Visitor visit homepage successfully
rspec ./spec/features/visitor_visit_homepage_spec.rb:12 # Visitor visit homepage and view recipe
rspec ./spec/features/visitor_visit_homepage_spec.rb:29 # Visitor visit homepage and view recipes list
E para criar a model recipe na linha do terminal e executar a migration criada em db/migrations:
$ rails generate model recipe title:string recipe_type:string cuisine:string difficulty:string cook_time:string
invoke active_record
create db/migrate/20191016221038_create_recipes.rb
create app/models/recipe.rb
invoke rspec
create spec/models/recipe_spec.rb
$ rspec
Migrations are pending. To resolve this issue, run:
bin/rails db:migrate RAILS_ENV=test
$ cd bin
$ rails db:migrate RAILS_ENV=test== 20191016221038 CreateRecipes: migrating ====================================
-- create_table(:recipes)
-> 0.0029s
== 20191016221038 CreateRecipes: migrated (0.0035s) ===========================
O que pode ser alterado nos códigos do projeto que eu não saiba?
Aguardo sua resposta.
Obrigado,
Marcelino
Discussão (1)
Carregando comentários...