2016-01-08 3 views
0

J'essaie de montrer un message flash pour l'une de mes méthodes lors de la soumission, il enregistre, puis affiche le message flash, mais il ne le fait pas.flash [: avis] ne pas montrer les rails 4

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 

mon avis en 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> 

Je ne sais pas quoi faire d'autre parce que je l'ai essayé différentes options, mais en vain. J'apprécierais toute aide merci.

Répondre

1

Je pense que cela se produit parce que votre page est redirigée avant d'affecter le message flash[:notice]. Donc, dans votre PromotionsController, déplacez votre ligne flash[:notice] avant redirect_to.

Et je ne vois pas où vous affichez ce message flash dans votre vue.

1

Vous devez afficher les messages flash trop:

<% 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 %> 

Je l'ai fait en application.html.erb pour afficher les messages flash. Vous pouvez le placer dans le fichier application.html.erb dans n'importe quelle div.

Et de mettre le message flash [: notice] avant redirect_to (: back) dans la méthode du contrôleur.

Espérons que cela aide!

0

redirect_to :back utilise javascript:history.back() qui ne configurera pas le message nécessaire dans votre flash pour être affiché. Essayez plutôt d'utiliser redirect_to other_page_path. J'espère que cela aide