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

Falha na renderização de "edit.html.erb" e "new.html.erb".

Bom dia, estou com um pequeno problema. Quando eu tento alterar ou criar um produto, não consigo renderizar suas páginas. Elas ficam brancas e apenas carrega a parte da navbar. Poderia me ajudar? Coloquei os códigos abaixo.

Código do arquivo "_form.html.erb"

<% @produto.errors.full_messages.each do |message| %>
    <div class="alert alert-danger">
        <%= message %>
    </div>
<% end %>

<%= form_for @produto do |f| %>

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

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

    <div class="form-group">
        <%= f.label :departamento %>
        <%= f.collection_select :departamento_id, @departamentos, :id, :nome, {}, class: "form-control" %>
    </div>

    <div class="form-inline">
        <div class="form-group">
            <%= f.label :quantidade %>
            <%= f.number_field :quantidade, step: 1, class: "form-control" %>
        </div>

        <div class="form-group">
            <%= f.label :preco %>
            <%= f.number_field :preco, step: 0.1, class: "form-control" %>
        </div>

        <%= f.submit texto_da_acao, class: "btn btn-primary" %>
    </div>
<% end %>

Código de "new.html.erb"

<% render partial: "form", locals: {texto_da_acao: "Criar o Produto"}%>

Código de "edit.html.erb"

<% render partial: "form", locals: {texto_da_acao: "Atualizar o produto"}%>

Código de "produtos_controller.rb"

class ProdutosController < ApplicationController

  before_action :set_produto, only: [:edit, :update, :destroy]



  def index
    @produtos_por_nome = Produto.order :nome
    @produtos_por_preco =  Produto.order(:preco).limit 2
  end

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

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

  def edit
    renderiza :edit
  end


  def update
    if @produto.update produto_params
      flash[:notice] = "Produto atualizado com sucesso"
      redirect_to root_url
    else
      renderiza :edit
    end
  end

  def create
      @produto = Produto.new produto_params
      if @produto.save
          flash[:notice] = "Produto salvo com sucesso!"
          redirect_to root_url
      else
          renderiza :new
      end
  end

  def destroy
    set_produto
    @produto.destroy
    redirect_to root_url

  end

  private
  def produto_params
    params.require(:produto).permit :nome,:descricao, :quantidade, :preco, :departamento_id
  end

  def renderiza(view)
    @departamentos = Departamento.all
    render view
  end

  def set_produto
    id=params[:id]
    @produto=Produto.find(id)
  end

end
2 respostas
solução!

Fala aí Patrick, blz?

Faça um teste, na declaração: <% render partial: "form", locals: {texto_da_acao: "Criar o Produto"}%>

Coloque um = logo após o <%.

<%= render partial: "form", locals: {texto_da_acao: "Criar o Produto"}%>

Veja se funciona.

É isso mesmo Fernando ! Esqueci que o "=" faz a "apresentação" para o usuário. Que mole que eu dei.. hahaha. Obrigado !