Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mikuzuhara

Preciso de ajuda com esse desafio da Campus Code

Recommended Posts

Esses são os arquivos principais do projeto:

 

home_controller.rb:

 

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

routes.rb:

Rails.application.routes.draw do
  root to: 'home#index'
end

recipe.rb

class Recipe < ApplicationRecord
  def cook_time_min
    "#{cook_time} minutos"
  end
end

index.html.erb:

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

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

Os arquivos spec.rb são estes:

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

visitor_view_recipe_detail_spec.rb:

require 'rails_helper'

feature 'Visitor view recipe details' do
  scenario 'successfully' do
    #cria os dados necessários
    recipe = Recipe.create(title: 'Bolo de cenoura', recipe_type: 'Sobremesa',
                           cuisine: 'Brasileira', difficulty: 'Médio',
                           cook_time: 60,
                           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
    click_on recipe.title

    # expectativas do usuário após a ação
    expect(page).to have_css('h1', text: recipe.title)
    expect(page).to have_css('h3', text: 'Detalhes')
    expect(page).to have_css('p', text: recipe.recipe_type)
    expect(page).to have_css('p', text: recipe.cuisine)
    expect(page).to have_css('p', text: recipe.difficulty)
    expect(page).to have_css('p', text: "#{recipe.cook_time} minutos")
    expect(page).to have_css('h3', text: 'Ingredientes')
    expect(page).to have_css('p', text: recipe.ingredients)
    expect(page).to have_css('h3', text: 'Como Preparar')
    expect(page).to have_css('p', text: recipe.cook_method)
  end

  scenario 'and return to recipe 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,
                           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
    click_on recipe.title
    click_on 'Voltar'

    # expectativa da rota atual
    expect(current_path).to eq(root_path)
  end
end

Cheguei a fazer essa alteração em index.html.erb:

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

<% @recipes.each do |recipe| %>
  <h1><%= recipe.title %></h1>
  <ul>
    <li><a href = "#detalhes"><%= recipe.recipe_type %></a></li>
    <li><%= recipe.cuisine %></li>
    <li><%= recipe.difficulty %></li>
    <li><%= recipe.cook_time_min %></li>
  </ul>
<% end %>

<a name = "detalhes"></a>
<h1><%= recipe.title %></h1>
<h3>Detalhes</h3>
<p><%= recipe.recipe_type %></p>
<p><%= recipe.cuisine %></p>
<p><%= recipe.difficulty %></p>
<p><%= recipe.cook_time %> minutos</p>
<h3>Ingredientes</h3>
<p><%= recipe.ingredientes %></p>
<h3>Como Preparar</h3>
<p><%= recipe.cook_method %></p>

Mas acusou o seguinte erro no rspec:

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

Visitor visit homepage
  successfully (FAILED - 1)

Failures:

  1) Visitor visit homepage successfully
     Failure/Error: <h1><%= recipe.title %></h1>

     ActionView::Template::Error:
       undefined local variable or method `recipe' for #<#<Class:0x0000560710d070d8>:0x0000560710cfda60>
       Did you mean?  @recipes
     # ./app/views/home/index.html.erb:15:in `_app_views_home_index_html_erb___4429749300272299021_47294173447260'
     # ./spec/features/visitor_visit_homepage_spec.rb:5:in `block (2 levels) in <top (required)>'
     # ------------------
     # --- Caused by: ---
     # NameError:
     #   undefined local variable or method `recipe' for #<#<Class:0x0000560710d070d8>:0x0000560710cfda60>
     #   Did you mean?  @recipes
     #   ./app/views/home/index.html.erb:15:in `_app_views_home_index_html_erb___4429749300272299021_47294173447260'

Finished in 0.08646 seconds (files took 1.45 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/features/visitor_visit_homepage_spec.rb:4 # Visitor visit homepage successfully

A sintaxe de link_to é esse:

linkto "textode_href", action = show, id = ?

Onde tem ? na sintaxe, eu não sei o que por e em "textodehref" deve ir:

recipe.title

E adicionei os campos ingredientes e cook_method como segue:

:~/workspace/cookbook_parte3$ rails generate migration add_attributes_to_recipe ingredients:string cook_method:string      invoke  active_record      create    db/migrate/20191021113942_add_attributes_to_recipe.rbmassa-90@ubuntu:~/workspace/cookbook_parte3$ rspecMigrations are pending. To resolve this issue, run:        bin/rails db:migrate RAILS_ENV=test:~/workspace/cookbook_parte3$ cd bin:~/workspace/cookbook_parte3/bin$ rails db:migrate RAILS_ENV=test== 20191021113942 AddAttributesToRecipe: migrating ============================-- add_column(:recipes, :ingredients, :string)   -> 0.0007s-- add_column(:recipes, :cook_method, :string)   -> 0.0004s== 20191021113942 AddAttributesToRecipe: migrated (0.0014s) ===================

A execução do rspec dos testes  do jeito que recebi o projeto do Code Saga original é este:

:~/workspace/cookbook_parte3$ rspec

Visitor view recipe details
  successfully (FAILED - 1)
  and return to recipe list (FAILED - 2)

Visitor visit homepage
  successfully
  and view recipe
  and view recipes list

Failures:

  1) Visitor view recipe details successfully
     Failure/Error:
       recipe = Recipe.create(title: 'Bolo de cenoura', recipe_type: 'Sobremesa',
                              cuisine: 'Brasileira', difficulty: 'Médio',
                              cook_time: 60,
                              ingredients: 'Farinha, açucar, cenoura',
                              cook_method: 'Cozinhe a cenoura, corte em pedaços pequenos, misture com o restante dos ingredientes')
     
     ActiveModel::UnknownAttributeError:
       unknown attribute 'ingredients' for Recipe.
     # ./spec/features/visitor_view_recipe_detail_spec.rb:6:in `block (2 levels) in <top (required)>'

  2) Visitor view recipe details and return to recipe list
     Failure/Error:
       recipe = Recipe.create(title: 'Bolo de cenoura', recipe_type: 'Sobremesa',
                              cuisine: 'Brasileira', difficulty: 'Médio',
                              cook_time: 60,
                              ingredients: 'Farinha, açucar, cenoura',
                              cook_method: 'Cozinhe a cenoura, corte em pedaços pequenos, misture com o restante dos ingredientes')
     
     ActiveModel::UnknownAttributeError:
       unknown attribute 'ingredients' for Recipe.
     # ./spec/features/visitor_view_recipe_detail_spec.rb:31:in `block (2 levels) in <top (required)>'

Finished in 9.35 seconds (files took 5.6 seconds to load)
5 examples, 2 failures

Failed examples:

rspec ./spec/features/visitor_view_recipe_detail_spec.rb:4 # Visitor view recipe details successfully
rspec ./spec/features/visitor_view_recipe_detail_spec.rb:29 # Visitor view recipe details and return to recipe list

Resumindo, o que preciso fazer para entregar esse desafio resolvido:

1) Como implementar link_to no arquivo de controller; 2) Como referenciar o objeto recipe de @recipe para detalhar a receita em index.html.erb.

Pago R$ 30,00 por desafio resolvido por alguém que se manifestar para me ajudar a solucioná-lo(s).

Aguardo retorno.

Obrigado,

Marcelino

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • 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.