Ao add departamento.nome recebo esse erro na tela. " undefined method `nome' for nil:NilClass "
Tentei fazer o produto = Produto.find(id do produto em questão), que vi em outro topico aqui, porem onde eu posso ver o id dos meus produtos?
Ao add departamento.nome recebo esse erro na tela. " undefined method `nome' for nil:NilClass "
Tentei fazer o produto = Produto.find(id do produto em questão), que vi em outro topico aqui, porem onde eu posso ver o id dos meus produtos?
Olá Bruna, como vai?
Pode por gentileza compartilhar algumas informações do seu projeto:
index
controller
: )
Codigo na index e controle estão abaixo, o banco de dados é o mesmo sugerido no projeto, postgres
<% if flash[:notice]%>
<div class="alert alert-success" role="alert">
<%= flash[:notice] %>
</div>
<%end%>
<table class="table table-bordered table-hover">
<thead>
<tr>
<td>Titulo</td>
<td>Ator principal</td>
<td>Nota</td>
<td>Ano</td>
<td>Genero </td>
<td colspan="2">
</tr>
</thead>
<tbody>
<%@filmes.each do |filme|%>
<tr>
<td><%= filme.titulo %></td>
<td><%= filme.atorprincipal %></td>
<td><%= filme.nota %></td>
<td><%= filme.ano %></td>
<td><%= filme.genero %></td>
<td><%= button_to "Remover", filme, method: :delete, class:"btn btn-danger", data: {confirm: "Tem certeza que deseja deletar o filme #{filme.titulo}?"} %></td>
<td><%= link_to "Alterar", edit_filme_path(filme), class: "btn btn-default" %> </td>
</tr>
<%end%>
</tbody>
</table>
<div class="alert alert-success" role="alert">
<h4 class="alert-heading">Filmes com maiores notas </h4>
</div>
<table class="table table-bordered table-hover">
<thead>
<tr>
<td>Titulo</td>
<td>Ator principal</td>
<td>Nota</td>
<td>Ano</td>
</tr>
</thead>
<tbody>
<%@filmes_com_maior_nota.each do |filme|%>
<tr>
<td><%= filme.titulo %></td>
<td><%= filme.atorprincipal %></td>
<td><%= filme.nota %></td>
<td><%= filme.ano %></td>
</tr>
<%end%>
</tbody>
</table>
Codigo na controller está assim:
class FilmesController < ApplicationController
def index
@filmes = Filme.order :nota
@filmes_com_maior_nota = Filme.order(nota: :desc).limit 2
end
def new
@filme = Filme.new
@generos = Genero.all
end
def create
atributos = params.require(:filme).permit(:titulo, :atorprincipal, :nota, :ano, :genero_id)
@filme = Filme.new atributos
if @filme.save
flash[:notice] = "Filme salvo com sucesso!"
redirect_to root_url
else
render :new
end
end
def destroy
id = params[:id]
Filme.destroy id
redirect_to root_url
end
def busca
@titulo = params[:titulo]
@filmes = Filme.where "titulo like ?", "%#{@titulo}%"
end
def edit
id = params [:id]
@filme = Filme.find(id)
@generos = Genero.all
render :new
end
def update
id = params[:id]
@filme = Filme.find(id)
@generos = Genero.all
atributos = params.require(:filme).permit(:titulo,
:atorprincipal, :nota, :ano, :genero_id)
if @produto.update atributos
flash[:notice] = "Filme atualizado com sucesso!"
redirect_to root_url
else
@generos = Filme.all
render :new
end
end
end
Acho que essa nil class ta impactando na hora de implementar o def edit, pois recebo o erro "wrong number of arguments (given 1, expected 0)" na linha onde tenho id = params [:id]
Oi, Bruna, tudo bem?
Muito obrigado por compartilhar seu código.
Para conferir os ids no dos filmes no banco, você por usar o comando rails console
no terminal para acessar o console da aplicação, em seguida faça os passos:
`filmes = Filme.all
Ou abrir seu PGAdmin
e acessar a tabela de filmes também, clicando em cima da tabela com botão direito e escolhendo a opção all rows
.
Porém, parece que esse erro ocorre por conta de filmes que não possuem gênero, especificamente nesse trecho:
<td><%= filme.genero %></td>
Se possível, peço por gentileza que verifique se todos os filmes possuem um gênero e no lugar de exibir o id
, sugiro o nome do gênero:
<td><%= filme.genero.nome %></td>
Realize esses teste e fale o resultado que teve. Conte sempre com a Alura.
: )
Consegui resolver com um
<%= filme.genero.nome unless filme.genero.nil? %> |
Parabéns Bruna, fico feliz que conseguiu!
Bons estudos e conte com a Alura!
: )