Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Método não encontrado

Quando tento criar um novo produto, é exibida a seguinte mensagem:

Showing C:/Users/GUI/lojadecamisetas/app/views/produtos/new.html.erb where line #1 raised:

undefined method `errors' for nil:NilClass

4 respostas

Oi Guilherme, tudo bem? posta pra gente aqui o código do new.html.rb pra gente ver? Posta também o controller de produtos?

Ola posto sim.

class ProdutosController < ApplicationController def index @produtos_por_nome = Produto.order(:nome) @produtos_por_preco = Produto.order(:preco) end

def busca @nome_a_buscar = params[:nome] @produtos = Produto.where "nome ilike ?", "%#{@nome_a_buscar}%" end

def create valores = params.require(:produto).permit :nome, :preco, :descricao, :quantidade @produto = Produto.new valores if @produto.save redirect_to root_url else render :new end end

def destroy id = params[:id] Produto.destroy id redirect_to root_url end end

new.html.erb

<%= form_for Produto.new do |f| %> <% @produto.errors.full_messages.each do |message|%> <%= message %> <% end %>

<%= f.label :nome %> <%= f.text_field :nome, class: "form-control" %>

<%= f.label :descricao %> <%= f.text_area :descricao, class: "form-control", rows: 4 %>

<%= f.label :quantidade %> <%= f.number_field :quantidade, step: 1, class: "form-control" %>
<%= f.label :preco %> <%= f.number_field :preco, class: "form-control" %>

<%= f.submit "Criar o produto", class: "btn btn-primary" %>

<% end %>

No meu terminal abri o rails console e digitei produto.errors.full_messages e não me retornou irb(main):001:0> produto.errors.full_messages => ["Quantidade can't be blank"]

olha a mensagem que me retournou

C:\Users\GUI\lojadecamisetas>rails console Loading development environment (Rails 5.0.2) irb(main):001:0> produto.errors.full_messages NameError: undefined local variable or method produto' for main:Object from (irb):1 from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-5.0.2/lib/rails/commands/console.rb:65:instart' from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-5.0.2/lib/rails/commands/console_helper.rb:9:in start' from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-5.0.2/lib/rails/commands/commands_tasks.rb:78:inconsole' from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-5.0.2/lib/rails/commands/commands_tasks.rb:49:in run_command!' from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-5.0.2/lib/rails/commands.rb:18:in' from bin/rails:4:in require' from bin/rails:4:in'

muito obrigado pela atenção e realmente preciso de ajuda agora.

solução!

Olá, Guilherme. Tive um problema parecido com o seu e ele era solucionado com o avançar da aula.

Quando você acessa a página para criar o produto (new.html.erb), você não possui ainda um produto para ser avaliado, mas o código ainda é executado e... não encontra o produto que ele deve dizer se possui, ou não, erros.

A solução é criar um método 'new' e indicar pra ele que @produto existe e é = Produto.new

Dei uma vasculhada e achei o meu projeto, meu método 'new' ficou assim :

def new
    @produto = Produto.new
    render :new
end

Tenta colocar isso no seu controller e diz pra gente se funcionou. Essa mesma aula vai te explicar esse erro e esse código do new ainda vai mudar até o fim do curso, ok?

Divirta-se!

Muito Obrigado Realmente faltava o método new!!!

Muito obrigado e Ótima semana