2011-01-25 8 views
9

he el código siguiente en mi controlador de: no note en visualización después de redirigir en Rails 3

def create 
    @tv_show = TvShow.new(params[:tv_show]) 

    respond_to do |format| 
     if @tv_show.save 
     format.html { redirect_to(tv_shows_path, :notice => 'Tv show was successfully created.') } 
     format.xml { render :xml => @tv_show, :status => :created, :location => @tv_show } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @tv_show.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

y la siguiente en mis tv_shows/index.html.erb

<div id="notice"><%= notice %></div> 

pero cuando Creo una nueva entrada, el mensaje de notificación no aparece después de redirigir a tv_shows_path. ¿Alguien tiene una idea de por qué?

Respuesta

0

La razón por la que el código no funcionó fue un problema con mi código de autenticación ... Después he implementado mi nueva forma de autenticación desde rayar el código de arriba está funcionando.

+3

Me pregunto si podría ser específico. Estoy teniendo exactamente el mismo problema, y ​​esta respuesta no ayuda. Mi controlador tiene 'before_filter: authenticate_user!'. ¿Es eso incorrecto? –

+0

Lo siento, pero ya no sé cuál era el problema hace un año. Por el momento, uso has_secure_password desde Rails 3.1 y esto funciona realmente genial para mí. http://railscasts.com/episodes/270-authentication-in-rails-3-1 – maveonair

17

¿Hay algún motivo por el que intente utilizar :notice y no flash[:notice]?

controlador:

respond_to do |format| 
    if @tv_show.save 
    format.html { 
     flash[:notice] = 'Tv show was successfully created.' 
     redirect_to tv_shows_path 
    } 
    format.xml { render :xml => @tv_show, :status => :created, :location => @tv_show } 
    else 
    format.html { render :action => "new" } 
    format.xml { render :xml => @tv_show.errors, :status => :unprocessable_entity } 
    end 
end 

Vista:

<% if flash[:notice] %> 
    <div id="notice"><%= flash[:notice] %></div> 
<% end %> 
+0

Creo Shaun tiene razón sobre la vista, debe ser "rápida [: aviso]". –

+0

He leído que esta sería la nueva forma con la versión 3 de rieles ... Pero intentaré su sugerencia, ¡gracias! – maveonair

+0

@Fabian: ¿Esto funcionó para ti? – Shaun

4

Me encontré con un 'problema' similar y la causa fue que estaba redireccionando a la acción que en sí misma tenía otra redirección. En el caso anterior, la causa más probable fue que dentro de tv_shows_path existe otra redirección.

En mi caso he tenido algo como esto en un filtro:

redirect_to root_url, notice: 'Unauthorized access!' 

Y root_url se creó para que apunte a home#index:

# Home controller 
def index 
    if user_signed_in? && current_user.admin? 
    redirect_to users_path 
    else 
    redirect_to customers_path 
    end 
end 

Esta segunda redirect_to era la causa del aviso 'unauthorized_access' no para mostrar.

La solución es simplemente redirigir a customers_path inmediatamente y no a root_url. Espero que esto ayude a alguien.

+1

Alternativamente, puede hacer un 'flash.keep' donde ocurre la segunda redirección (antes de la llamada' redirect_to'). Esto es lo que hice y parece funcionar como se esperaba. – Koby

1

Acabo de tener el mismo problema y el error fue tan tonto, pero a veces no es posible.

que tengo en mi diseño de la aplicación el siguiente código:

<div id="content" > 
    <div class="wrapper"> 
     <% flash.each do |name, msg| %> 
      <% content_tag :div, msg, class: "flash #{name}"%> 
     <% end %> 
     <%= yield %> 
    </div> 
</div> 

Ahora, usted puede ver por qué era incapaz de ver mi mensaje flash?

¡Sí! Debe comprobar si se pone el signo = aquí:

<%= content_tag :div, msg, class: "flash #{name}"%> 
+1

En 'content_tag', debería ser' msg' en lugar de ': msg' –