0
votes

I am trying to show flash message for one of my methods upon submit, it saves and then displays the flash message but it is not doing that.

class PromotionsController < ApplicationController
  def newsletter_signup

    @subscriber = Subscriber.new(params[:subscriber])
    if params[:subscriber][:email].present?
      @subscriber.save
      redirect_to :back
      flash[:notice] = "Thank you. You have subscribed to our newsletter"
    end
  end
end

my view in application.html.erb

<div class="row ">
  <div class="icon-send col-sm-4 col-lg-4 hidden-xs  col-md-4 col-xs-4">
    <span class="text-center subscribeLabel">Subscribe to Our Newletter</span>

 </div>
 <%= form_for(Subscriber.new, url: newsletter_signup_url, :validate => true) do |person_form| %>
     <div class="col-md-6 col-sm-6 col-xs-7">
        <%= person_form.text_field :email, id: "email", class: "SubscibenowText", placeholder: "Enter Your Email Address" %>
     </div>
     <div class="col-md-2 col-sm-2 col-xs-5 SubRelative">
       <button type="submit" class="pull-right btn btn-default subscribebtn">
         GET STARTED
       </button>
     </div>
  <% end %>
</div>

I am not sure what else to do because i have tried different options but all to no avail. I would appreciate any help thanks.

3

3 Answers

1
votes

I think it is happening because your page is getting redirected before assigning message into flash[:notice].

So, In your PromotionsController move your flash[:notice] line before redirect_to .

And I don't see where you are displaying this flash message in your view.

1
votes

You need to display the flash messages too:

<% unless flash.empty? %>
  <div class="row flash_msg">
    <% flash.each do |name, message| %>
      <div class="text-center alert <%= flash_class(name) %>">
        <button class="close" data-dismiss="alert" type="button">&times;</button>
        <i class="<%= flash_icon(name) %>"></i>
        <%= message %>
      </div>
    <% end %>
  </div>
<% end %>

I did this in application.html.erb to display the flash messages. You can put it inside the application.html.erb file in any div.

And put the flash[:notice] message before redirect_to(:back) in controller method.

Hope this helps!

0
votes

redirect_to :back uses javascript:history.back() which will not setup the necessary message in your flash to be displayed. Instead try using redirect_to other_page_path. Hope that helps