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
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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
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.submit "Criar o produto", class: "btn btn-primary" %>
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.
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