Ir para conteúdo
mikuzuhara

NoMethodError: undefined method `name'

Recommended Posts

Configuro a pasta do projeto da seguinte forma:

 

:/workspace/cookbook_parte7/rails generate migration RemoveRecipe_typeToRecipes recipe_type:string

:/workspace/cookbook_parte7/rails db:migrate RAILS_ENV=test

:/workspace/cookbook_parte7/rails generate models recipe_type name:string

:/workspace/cookbook_parte7/rails db:migrate RAILS_ENV=test

 

Faço as alterações em recipe_type.rb e 20191023142828_create_recipe_types.rb conforme mostrado abaixo e passo o comando novamente:

 

:/workspace/cookbook_parte7/rails db:migrate RAILS_ENV=test

 

recipe_type.rb:

 

class RecipeType < ApplicationRecord
    has_many :recipes, :class_name => :Recipe
end

20191023142828_create_recipe_types.rb:

 

class CreateRecipeTypes < ActiveRecord::Migration[5.2]
  def change
    create_table :recipe_types do |t|
      t.string :name

      t.timestamps
    end

    create_table :recipes do |t|
      t.belongs_to :recipe_type
      t.datetime :published_at
      t.timestamps
    end
  end
end

routes.rb:

 

Rails.application.routes.draw do
  root to: 'recipes#index'
  resources :recipes, :recipe_types
end

recipes_controller.rb:

 

class RecipesController < ApplicationController
  def index
    @recipes = Recipe.all
  end

  def show
    @recipe = Recipe.find(params[:id])
  end

  def new
    @recipe = Recipe.new
  end

  def create
    @recipe = Recipe.new(recipe_params)
    if @recipe.save
      redirect_to @recipe
    else
      flash[:alert] = 'Você deve informar todos os dados da receita'
      render :new
    end
  end

  def edit
    @recipe = Recipe.find(params[:id])
  end

  def update
    @recipe = Recipe.find(params[:id])
    if @recipe.update(recipe_params)
      redirect_to @recipe
    else
      flash[:alert] = 'Você deve informar todos os dados da receita'
      render :edit
    end
  end

  private

  def recipe_params
    params.require(:recipe).permit(:title, :recipe_type, :cuisine, :difficulty,
                                   :cook_time, :ingredients, :cook_method)
  end
end

index.html.erb:

 

<h1>CookBook</h1>
<p>Bem-vindo ao maior livro de receitas online</p>

<%= link_to 'Enviar uma receita', new_recipe_path %>

<% @recipes.each do |recipe| %>
  <h1><%= link_to recipe.title, recipe %></h1>
  <ul>
    <li><%= recipe.recipe_type %></li>
    <li><%= recipe.cuisine %></li>
    <li><%= recipe.difficulty %></li>
    <li><%= recipe.cook_time_min %></li>
  </ul>
<% end %>

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_type = RecipeType.create(name: 'Sobremesa')
    recipe = Recipe.create(title: 'Bolo de cenoura', difficulty: 'Médio',
                           recipe_type: recipe_type, cuisine: 'Brasileira',
                           cook_time: 50,
                           ingredients: 'Farinha, açucar, cenoura',
                           cook_method: 'Cozinhe a cenoura, corte em pedaços pequenos, misture com o restante dos ingredientes')

    # 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.name)
    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_type = RecipeType.create(name: 'Sobremesa')
    another_recipe_type = RecipeType.create(name: 'Prato principal')
    recipe = Recipe.create(title: 'Bolo de cenoura', difficulty: 'Médio',
                           recipe_type: recipe_type, cuisine: 'Brasileira',
                           cook_time: 50,
                           ingredients: 'Farinha, açucar, cenoura',
                           cook_method: 'Cozinhe a cenoura, corte em pedaços pequenos, misture com o restante dos ingredientes')

    another_recipe = Recipe.create(title: 'Feijoada',
                                   recipe_type: another_recipe_type,
                                   cuisine: 'Brasileira', difficulty: 'Difícil',
                                   cook_time: 90,
                                   ingredients: 'Feijão e carnes',
                                   cook_method: 'Misture o feijão com as carnes')

    # 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.name)
    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.name)
    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 seguinte comando do rspec:

 

:~/workspace/cookbook_parte7$ rspec ./spec/features/visitor_visit_homepage_spec.rb:11
Run options: include {:locations=>{"./spec/features/visitor_visit_homepage_spec.rb"=>[11]}}

Visitor visit homepage
  and view recipe (FAILED - 1)

Failures:

  1) Visitor visit homepage and view recipe
     Failure/Error: visit root_path
     
     SyntaxError:
       /home/massa-90/workspace/cookbook_parte7/app/views/recipes/index.html.erb:8: syntax error, unexpected tIVAR, expecting '('
       ...r.append=( @recipe.@recipe_type.name );@output_buffer.safe_a...
       ...                   ^~~~~~~~~~~~
     # ./spec/features/visitor_visit_homepage_spec.rb:21:in `block (2 levels) in <top (required)>'

Finished in 0.07533 seconds (files took 1.41 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/features/visitor_visit_homepage_spec.rb:11 # Visitor visit homepage and view recipe

O que pode estar faltando no código para passar nesse teste?

 

Aguardo retorno.

 

Obrigado,

 

Marcelino

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Alkindar33
      Ultimamente tenho ficado em dúvida sobre o futuro das linguagens em relação a mercado de trabalho, eu trabalho atualmente com NodeJS mas sinto que a linguagem está se reproduzindo como coelho em termos de desenvolvedores aprendendo ela e por causa da lei de oferta do mercado tende a se pagar menos e etc e não estou muito contente com a linguagem em si. Mas tenho dúvida de qual linguagem escolher para conseguir melhores salários e qual deve crescer mais a longo prazo. Linguagens que eu vi para Web: Go, Elixir, Ruby e Rust.
      Alguém tem alguma ideia de qual pode ser uma boa linguagem para focar o aprendizado?
    • Por dayvidham
      Olá, atualmente faço parte de uma comunidade brasileira que está imersa em um projeto DeFi de um Token que roda na rede BSC.
      Temos um Token chamado SkyRocketSR criado a 31 dias e ja somos mais de 5000 pessoas interessadas no seu sucesso.
      Estamos em busca de programadores, designers e todos que poderem somar à comunidade de alguma forma.
      Alguém gostaria de saber mais do projeto e quem sabe compor a equipe da linha de frente já que somos uma comunidade?
      Obrigado e contamos com você.

      https://skyrocketsr.com/en/

      Aqui há mais sobre nós!
    • Por dayvidham
      Olá, atualmente faço parte de uma comunidade brasileira que está imersa em um projeto DeFi de um Token que roda na rede BSC.
      Temos um Token chamado SkyRocketSR criado a 31 dias e ja somos mais de 5000 pessoas interessadas no seu sucesso.
      Estamos em busca de programadores, designers e todos que poderem somar à comunidade de alguma forma.
      Alguém gostaria de saber mais do projeto e quem sabe compor a equipe da linha de frente já que somos uma comunidade?
      Obrigado e contamos com você.

      https://skyrocketsr.com/en/

      Aqui há mais sobre nós!
    • Por dayvidham
      Olá, atualmente faço parte de uma comunidade brasileira que está imersa em um projeto DeFi de um Token que roda na rede BSC.
      Temos um Token chamado SkyRocketSR criado a 31 dias e ja somos mais de 5000 pessoas interessadas no seu sucesso.
      Estamos em busca de programadores, designers e todos que poderem somar à comunidade de alguma forma.
      Alguém gostaria de saber mais do projeto e quem sabe compor a equipe da linha de frente já que somos uma comunidade?
      Obrigado e contamos com você.

      https://skyrocketsr.com/en/

      Aqui há mais sobre nós!
    • Por Ross Risso
      Olá pessoal!
      Estou com problemas para inserir as compras no banco de dados.
      até aqui funciona, mas se tendo adicionar outros dados ele não aceita. Só permite adicionar $id e $qtd. Ainda tenho que adicionar o ID do pedido e o valor da mercadoria. Alguém poderia me ajudar?
          <?php   foreach($_SESSION['carrinho'] as $id => $qtd){              $sql = "INSERT INTO tbldetped (MercDetPed, QuantDetPed) VALUES ('$id','$qtd')";         $qr = mysqli_query($conn, $sql);          } ?>
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.