ruby-on-rails ruby-on-rails-3.2

El uso de: alert(o: notice) con el método de renderizado, de la guía de Ruby On Rails llamada ''Disposiciones y representación en rails'', no funciona para mí:



ruby-on-rails ruby-on-rails-3.2 (3)

Estoy confundido en cuanto a por qué esa Guía de Rails menciona el uso de valores flash en el render , ya que solo parecen funcionar en redirect_to en este momento. Creo que encontrará que su enfoque funciona si coloca un flash.now[:alert] = ''Alert message!'' antes de su llamada al método de render.

Edición: esta es una falla en las guías que se arreglarán , debe usar el método de llamada por separado para configurar el flash antes de llamar a la representación.

El uso de: alert (o: notice) con el método de renderizado, de la guía de Ruby On Rails llamada ''Layouts and Rendering in Rails'' en http://guides.rubyonrails.org/layouts_and_rendering.html , no funciona para mí

Ese es el código de muestra proporcionado en la guía:

def index @books = Book.all end def show @book = Book.find_by_id(params[:id]) if @book.nil? @books = Book.all render "index", :alert => ''Your book was not found!'' end end

Tengo un controlador de saludo que se ve así:

class HelloController < ApplicationController def index @counter = 5 end def bye @counter = 4 render "index", :alert => ''Alert message!'' end end

Mi vista index.html.erb se ve así:

<ul> <% @counter.times do |i| %> <li><%= i %></li> <% end %> </ul>

Al acceder a http://localhost:3000/hello/bye , veo la vista de índice, es decir, una lista de números del 1 al 4 como se esperaba, pero no hay un ''Mensaje de alerta''. mostrando alerta.

Mi diseño usa esto para mostrar mensajes de alerta:

<% flash.each do |k, v| %> <div id="<%= k %>"><%= v %></div> <% end %>


Normalmente harías algo como:

if @user.save redirect_to users_path, :notice => "User saved" else flash[:alert] = "You haz errors!" render :action => :new end

Lo que quieres hacer es (y me gusta mucho mejor esta sintaxis):

if @user.save redirect_to users_path, :notice => "User saved" else render :action => :new, :alert => "You haz errors!" end

... sin embargo, eso no es válido para ActionController::Flash#render .

Pero , puede extender ActionController::Flash#render para hacer exactamente lo que quiere:

Cree config/initializers/flash_renderer.rb con el siguiente contenido:

module ActionController module Flash def render(*args) options = args.last.is_a?(Hash) ? args.last : {} if alert = options.delete(:alert) flash[:alert] = alert end if notice = options.delete(:notice) flash[:notice] = notice end if other = options.delete(:flash) flash.update(other) end super(*args) end end end

Ref: http://www.perfectline.co/blog/2011/11/adding-flash-message-capability-to-your-render-calls-in-rails-3/


Tratar

def bye @counter = 4 flash.now[:error] = "Your book was not found" render :index end