1
resposta

Página não direcionada ao create

Bom dia.

Quando envio o formulário clicando no botão ele permanece na mesma página e nem reinicia os valores, no entanto os dados são salvos no formulário e aparecem na página inicial, na tabela. Alguém sabe o motivo?

routes.rb

Rails.application.routes.draw do
    post "/produtos" => "produtos#create"
    get "/produtos/new" => "produtos#new"
    root "produtos#index"
end

index.html.erb

<html>
<body>
<%= nav_bar brand: "Arkhadia", brand_link: root_url %>

<table class = "table" table-bordered>
    <thead>
        <tr>
            <th>Nome</th>
            <th>Descrição</th>
            <th>Preço</th>
            <th>Quantidade</th>
        </tr>
    </thead>
    <tbody>
        <% @produtos_por_nome.each do |produto| %>
        <tr>
            <td><%= produto.nome %></td>
            <td><%= produto.descricao %></td>
            <td><%= produto.preco %></td>
            <td><%= produto.quantidade %></td>
        </tr>
        <%end%>
    </tbody>
</table>

<table class = "table" table-bordered>
    <thead>
        <tr>
            <th>Nome</th>
            <th>Descrição</th>
            <th>Preço</th>
            <th>Quantidade</th>
        </tr>
    </thead>
    <tbody>
        <% @produtos_por_preco.each do |produto| %>
        <tr>
            <td><%= produto.nome %></td>
            <td><%= produto.descricao %></td>
            <td><%= produto.preco %></td>
            <td><%= produto.quantidade %></td>
        </tr>
        <%end%>
    </tbody>
</table>

</body>
</html>

produtos_controller.rb

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

    def create
        valores = params.require(:produto).permit!
        produto = Produto.create valores
    end
end

new.html.erb

<html>
<body>

<%= form_for Produto.new do |f| %>
Nome 
<input type="text" name="produto[nome]" /><br/>

Descrição 
<textarea name="produto[descricao]"></textarea><br/>

Preço 
<input type="number" name="produto[preco]" /><br/>

Quantidade
<input type="number" name="produto[quantidade]" /><br/>

<button type="submit">Criar</button>

<%end%>
</body>
</html>

create.html.erb

<html>
Criado!
</html>
1 resposta

Oi Vinicius, tudo bem? Você não definiu nenhuma regra de redirect. Meu chute é que o Rails tá recordando do objeto criado por causa da sessão, pra que não se perca os valores no caso de erro.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software