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
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:in
start'
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:in
console'
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