2009-11-22 5 views
3

je l'extrait suivant du code dans mon contrôleurflash [: avis] ne fonctionne pas dans Rails

def create 
    @message = Message.new(params[:message]) 
    @message.message = h(@message.message) 
    if @message.save 
     flash[:message] = "Message Sent. Thank You for Contacting Me" 
    else 
     flash[:message] = "OOps Something went wrong" 
    end 
    redirect_to :action => 'contact' 
    end 

Lorsque je tente d'afficher le message flash sous la forme de contact, il doesnot écran. J'ai cherché des solutions possibles, mais elles ne semblent pas fonctionner. Des idées sur ce qui ne va pas?

+1

Ceci est probablement juste une faute de frappe, mais il ne fait pas de mal à vérifier l'évidence en premier: Dans le titre, vous dites flash [: avis] et dans votre méthode vous définissez flash [: message]. Etes-vous en train d'attendre flash [: avis] dans vos opinions? – mtyaka

+0

Quel code utilisez-vous pour afficher le message? –

+0

désolé mon mauvais. C'est flash [: message] dans la vue aussi. – Shiv

Répondre

4

Le hachage flash peut contenir n'importe quel ensemble de messages que vous souhaitez enregistrer jusqu'au rendu suivant. Les échafaudages utilisent généralement le contenu de flash [: notice] pour les messages de notification. Si vous n'avez pas utilisé d'échafaudage pour générer votre page Web, vous devrez ajouter <%= flash[:notice]%> à vos opinions.

Vous définissez le flash [: message] dans votre contrôleur. Donc, il ne va pas apparaître n'importe où dans votre vue, sauf si votre vue contient <%= flash[:message]%> quelque part.

Vos solutions possibles sont de modifier toutes les occurrences de flash[:message] à flash[:notice] dans votre contrôleur ou d'ajouter <%= flash[:message]%> à toutes les vues que cette action pourrait afficher.

+0

Je l'avais mis à mon avis, cela n'a pas fonctionné, Aussi la prochaine possibilité j'ai changé flash [: message] à clignoter [: avis] et mettre

<%= flash[:message]%>
dans la vue, mais cette dint fonctionne aussi. D'autres suggestions? – Shiv

+0

Je pensais qu'un message flash persiste même après une redirection. Corrigez-moi si je me trompe. – Shiv

+0

Il se peut qu'il soit réinitialisé à cause de la redirection. Est-ce que montrer la redirection n'importe où? – EmFi

2

ne dis pas que vous ne l'auriez pas essayé, mais si je vous, je ferais quelque chose sur les lignes comme

<% if flash[:messsage].blank? %> 
    <h1> flash hash is blank </h1> 
<% end %> 

Si vous voyez le « hachage flash est vide » dans votre navigateur, vous savez ce que cela veut dire.

EDIT: -

Quelque chose de la documentation « Rappelez-vous: Ils sont partis au moment où l'action suivante a été effectuée. » Essayez ceci dans votre contrôleur

flash.keep(:message) #keep the flash entry available for the next action 
+0

yup essayé, mais ce que je ne comprends pas, c'est pourquoi il est effacé? – Shiv

+0

Nope ne fonctionne pas. – Shiv

16

Votre contrôleur redirige vers: action => 'contact'. Assurez-vous que le modèle en cours de rendu pour cette action a la sortie de notification flash.

<%= flash[:message] %> 

De même, vous pouvez utiliser render: action ... vs redirect_to: action .... Enregistrez-vous une demande.

+0

ouais le problème est si j'utilise flash.now [: message] = "Blah Blah" alors il fonctionne avec une action de rendu. Mais juste par curiosité je me demandais pourquoi cela ne fonctionne pas avec l'action de redirection. Et oui, la solution que vous avez mentionnée est là dans contact.html.erb. – Shiv

+6

Eh bien flash.now ne fonctionne que pour l'état actuel de l'action, une fois que vous le déplacez est effacé. Donc flash [..] serait ce que vous voulez utiliser si vous en avez besoin pour une autre requête. Depuis votre redirection, et flash [..] ne fonctionne pas. Je me demande si vous pourriez avoir des problèmes de session avec votre application. – nowk

+0

c'est intéressant, pourrait être un problème de sessions. Laissez-moi examiner cela. – Shiv

Questions connexes