2011-10-30 9 views
5

Devise funciona perfectamente en mi aplicación a excepción de los mensajes flash de devise.en.yml no se muestran en la vista. ¿Qué estoy haciendo mal?Diseñar mensajes flash no aparece

A continuación se muestra mi página de registro vista He intentado ambos :alert y :notice pero no funcionaba.

Gracias de antemano

<h2>Sign up</h2> 

<% if flash[:alert] %> 
    <%=flash[:alert]%> 
<%end%> 

<%= form_for(resource,:as=>resource_name,:url => registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 
    <p><%= f.label :Username %></p> 
    <p><%= f.text_field :username %></p> 

    <p><%= f.label :email %></p> 
    <p><%= f.text_field :email %></p> 

    <p><%= f.label :password %></p> 
    <p><%= f.password_field :password %></p> 

    <p><%= f.label :password_confirmation %></p> 
    <p><%= f.password_field :password_confirmation %></p> 

    <p><%= f.submit "Sign up" %></p> 
<% end %> 

<%= render :partial => "devise/shared/links" %> 

Respuesta

6

No ve ningún flash porque el flash no está configurado para nada. Parece que estás malinterpretando el propósito del flash.

El comportamiento general del flash debe establecerse en un valor en la sesión actual del usuario en la solicitud actual, y luego en una solicitud posterior, se muestra ese mensaje flash. Este patrón permite acciones para configurar el flash, redirigir a otra página y luego mostrar ese flash en esa página que carga desde la redirección. El flash se consume y se elimina de la sesión.

La excepción a esto es usar flash.now que hace que el flash esté disponible a partir de la acción actual, en lugar de una acción posterior.

En su caso, el flash no se visualiza porque no hay flash para mostrar. Cargando la página de registro no establece ningún mensaje flash. La única forma en que el flash tendría un valor en su vista sería si alguna otra acción se redireccionara a él, configurando el flash antes de que lo hiciera. Algo como esto

redirect_to new_user_registrations_path, :notice => "This flash will show up on the sign up page" 

Normalmente no desea llamar al flash dentro de una vista específica, sino más bien en el diseño de la aplicación. Esto permite que el flash se configure desde cualquier acción que haga una redirección y el flash aparecerá en lo que sea que sea la página subsiguiente. Configurar el flash desde una vista específica requeriría saber que la vista específica será la utilizada en la redirección. Este no siempre es el caso, flash.now sería una excepción ya que no funciona con una redirección. Si tuviera que usar el flash en una vista específica, no usaría las flash vars convencionales de alerta/aviso, ya que las buscaría en el diseño de mi aplicación y haría que mi flash se renderizara dos veces. En su lugar podría establecer el flash en algo así como

class UsersController < ApplicationController 
    def custom_action 
    @user = User.find params[:id] 
    do_something_with @User 
    flash[:user] = "Custom action completed!" 
    redirect_to @user 
    end 
end 

Luego, en mi usuarios/Mostrar la presentación me gustaría ver para el flash [: personalizada] y hacer algo con ese destello que se maneja de manera diferente que el manejo de flash en mi diseño. En realidad, no tuve que hacer algo como esto, pero si tuviera que hacerlo, así es como podría manejarlo.

0

<% = render: parcial => "shared/flash_messages" %> o = render 'shared/flash_messages' (si las personas están utilizando Haml) en su archivo de vista para ver los mensajes de error o de concebir: el fracaso : mensajes

Cuestiones relacionadas