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"
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:
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
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
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