¿Diseños de rieles por acción?
Utilizo 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 manera 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
Layout 'name',: only = > [: new]
Pero no puedo usar eso para especificar 2 o más diseños diferentes.
Para ejemplo:
Cuando llamo a layout 2 veces en el mismo controlador, con diferentes nombres de layout y diferentes opciones solamente, la primera se ignora - esas acciones no se muestran en el layout que especifiqué.
Nota: Estoy usando Rails 2.
7 answers
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-11 19:58:08
class ProductsController < ApplicationController
layout "admin", only: [:new, :edit]
end
O
class ProductsController < ApplicationController
layout "application", only: [:index]
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-18 12:00:26
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-20 05:46:14
También puede especificar el diseño para la acción usando render:
def foo
render layout: "application"
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-24 09:04:03
Hay una gema (layout_by_action) para eso:)
layout_by_action [:new, :create] => "some_layout", :index => "other_layout"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-26 23:45:35
Varias formas de especificar el layout bajo el controlador:
-
En el siguiente código, application_1 layout se llama bajo index y show action of Users controller y application layout(default layout) se llama para otras acciones.
class UsersController < ApplicationController layout "application_1", only: [:index, :show] end
-
En el siguiente código, se llama a application_1 layout para todas las acciones del controlador de usuarios.
class UsersController < ApplicationController layout "application_1" end
-
En el siguiente código, application_1 layout se llama para la acción de prueba de los controladores de usuarios solamente y para todos se llama a otro diseño de aplicación de acción (predeterminado).
class UsersController < ApplicationController def test render layout: "application_1" end end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-11 06:57:53
Precisión :
Una forma no realmente pero de trabajo SECO es lo que ves arriba, pero con una precisión : el diseño debe estar después de tus variables para trabajar ("@some"). As:
def your_action
@some = foo
render layout: "your_layout"
end
Y no:
def your_action
render layout: "your_layout"
@some = foo
@foo = some
end
Si haces un before_action... tampoco funcionará.
Espero que ayude.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-17 12:41:25