All my code is working nicely, I want to render the same page :new after a user submits a form with your order. The problem is about the :notice message that I want to display Pedido enviado com sucesso. in the page after a submission but it doesn’t work. My validation error messages are displayed nicely but I don’t know why my success message doesn’t.
Any tips?
(Sorry about my code indentation)
My pedidos_controller goes down:
class PedidosController < ApplicationController
def new
@pedido = Pedido.new
1.times do
pessoa = @pedido.build_pessoa
produto = @pedido.produtos.build
end
respond_to do |format|
format.html # new.html.erb
format.json { render json: @pedido }
end
end
def create
@pedido = Pedido.new(params[:pedido])
respond_to do |format|
if @pedido.save
PedidosMailer.delay.registro_do_pedido(@pedido)
PedidosMailer.delay.email_para_cotar_produtos(@pedido)
format.html { redirect_to action: "new", notice: 'Pedido enviado com sucesso.' }
format.json { render json: @pedido, status: :created, location: @pedido }
else
format.html { render action: "new" }
format.json { render json: @pedido.errors, status: :unprocessable_entity }
end
end
end
end
my new.html.erb view:
<p id="notice"><%= notice %></p>
<%= render 'form' %>
my _form.html.erb view:
<%= form_for(@pedido, :html => { :class => "form-contato"}) do |f| %>
<% if @pedido.errors.any? %>
<div id="error_explanation">
<h2>Ocorreram <%= pluralize(@pedido.errors.count, "erro") %></h2>
<ul>
<% @pedido.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="row">
<div class="span4">
<h1>Dados pessoais</h1>
<%= f.fields_for :pessoa do |builder| %>
<%= render 'pessoa_fields', f: builder %>
<% end %>
</div>
<div class="span8">
<h1>Ítens</h1>
<%= f.fields_for :produtos do |builder| %>
<%= render 'produto_fields', f: builder %>
<% end %>
</div>
<div class="span10">
<%= link_to_add_fields "Adicionar mais produtos", f, :produtos %>
</div>
<%= button_tag "Enviar", class: "btn btn-red span10", name: "commit" %>
</div>
<% end %>
my _pessoa_fields.html.erb view:
<fieldset>
<%= f.text_field :nome, class: "span4", placeholder: "Nome" %>
<br />
<%= f.text_field :telefone, class: "span4", placeholder: "Telefone" %>
<br />
<%= f.text_field :email, class: "span4", placeholder: "Email" %>
</fieldset>
my _produto_fields.html.erb view:
<% @lista_de_produtos = ["Qualibom standard", "Qualibom premium", "Bomdemais standard", "Bomdemais premium"] %>
<fieldset class="campos-produtos span10">
<div class="span3">
<%= f.select :nome, options_for_select(@lista_de_produtos, :selected => f.object.nome), :prompt => 'Selecione um produto' %>
</div>
<div class="span3">
<%= f.text_field :quantidade, class: "span3", placeholder: "Quantidade" %>
</div>
</fieldset>
You need to use
flash[:notice], notnotice, in your view:When you pass a message via the
notice:parameter ofredirect_to, it’s placed into theflasharray, which is a special pseduo-session which persist for a single request:From the ActionController::Redirecting documentation: