2
respostas

Problema com o botão criar e atualizar

Criei os arquivos form, edit e new, porém o arquivo edit não está sendo acessado pelo que parece, então quando clico em atualizar o botão que aparece é criar novo. meu _form.html.erb é este

<% @produto.errors.full_messages.each do |message|%>
    <div class="alert alert-danger" role="alert"><%=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, class: "form-control", rows: 4%>  
</div>

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


<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, class: "form-control"%> 
    </div>

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



<% end %>

meu new.html.erb é este

<%= render partial: 'form', locals: { texto_da_acao: 'Criar o produto'} %>

e o meu edit.html.erb é este

<%= render partial: 'form', locals: { texto_da_acao: 'Atualizar o produto'} %>
2 respostas

Oi Thiago,

Qual URL você está acessando e qual método do controller que está sendo chamado? Posta aqui o código do seu controller e suas rotas?

Abraço!

Aqui está meu produto_controller

class ProdutosController < ApplicationController

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

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

    def new
        @produto = Produto.new
        renderiza_new
    end

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

    def edit
        renderiza_new
    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] = @mensagem= "Produto salvo com sucesso!"
            redirect_to root_url
        else
            renderiza_new
        end    
    end

    def destroy
    @produto.destroy
    redirect_to root_url
    end



    private

    def renderiza_new
    @departamentos = Departamento.all
    render :new
    end

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

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

end

E aqui estão as rotas (routes)

Rails.application.routes.draw do
  resources :departamentos
    resources :produtos, only: [:new, :create, :destroy, :edit, :update]
    get "/produtos/busca" =>"produtos#busca", as: :busca_produto
    root "produtos#index"
end