tutorial software rails ejemplos descargar curso caracteristicas ruby-on-rails

ruby-on-rails - software - ruby on rails tutorial



¿Diseños de rieles por acción? (6)

Hay una gema (layout_by_action) para eso :)

layout_by_action [:new, :create] => "some_layout", :index => "other_layout"

https://github.com/barelyknown/layout_by_action

Uso un diseño diferente para algunas acciones (principalmente para la nueva acción en la mayoría de los controladores).

Me pregunto cuál sería la mejor forma de especificar el diseño. (Estoy usando 3 o más diseños diferentes en el mismo controlador)

No me gusta usar

render: layout => ''name''

Me gustó hacer

diseño ''nombre'',: only => [: new]

Pero no puedo usar eso para especificar 2 o más diseños diferentes.

Por ejemplo:

Cuando llamo al diseño 2 veces en el mismo controlador, con diferentes nombres de diseño y diferentes opciones, el primero se ignora: esas acciones no se muestran en el diseño que especifiqué.

Nota: estoy usando Rails 2.


Puede especificar el diseño de una acción individual usando respond_to :

def foo @model = Bar.first respond_to do |format| format.html {render :layout => ''application''} end end


Puede usar un método para establecer el diseño.

class MyController < ApplicationController layout :resolve_layout # ... private def resolve_layout case action_name when "new", "create" "some_layout" when "index" "other_layout" else "application" end end end


También puede especificar el diseño para la acción usando renderización:

def foo render layout: "application" end


Varias formas de especificar el diseño bajo el controlador:

  1. En el código siguiente, el diseño de la aplicación_1 se llama bajo índice y muestra la acción del controlador de los usuarios y el diseño de la aplicación (diseño predeterminado) se llama para otras acciones.

    class UsersController < ApplicationController layout "application_1", only: [:index, :show] end

  2. En el siguiente código, se llama a la distribución de la aplicación_1 para toda la acción del controlador de usuarios.

    class UsersController < ApplicationController layout "application_1" end

  3. En el código siguiente, el diseño de la aplicación_1 se llama para la acción de prueba de los controladores de usuarios únicamente y para el resto de la acción se llama a la distribución de la aplicación (predeterminada).

    class UsersController < ApplicationController def test render layout: "application_1" end end


class ProductsController < ApplicationController layout "admin", only: [:new, :edit] end

o

class ProductsController < ApplicationController layout "application", only: [:index] end