Rails布局每个动作?
我对某些操作使用了不同的布局(大部分是针对大多数控制器中的新操作)。
我想知道什么是最好的方式来指定布局将是? (我在同一个控制器中使用3个或更多不同的布局)
我不喜欢使用
render:layout =>'name'
我喜欢做
布局“name”,:only => [:new]
但我不能用它来指定2个或更多不同的布局。
例如:
当我在相同的控制器中调用布局2次,使用不同的布局名称和不同的选项时,第一个被忽略 – 这些操作不会显示在我指定的布局中。
注意:我正在使用Rails 2。
您可以使用一种方法来设置布局。
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
class ProductsController < ApplicationController layout "admin", only: [:new, :edit] end
要么
class ProductsController < ApplicationController layout "application", only: [:index] end
您可以使用respond_to指定单个操作的布局:
def foo @model = Bar.first respond_to do |format| format.html {render :layout => 'application'} end end
有一个gem(layout_by_action)的:)
layout_by_action [:new, :create] => "some_layout", :index => "other_layout"
您也可以使用render为动作指定布局:
def foo render layout: "application" end
在控制器下指定布局的各种方法:
-
在以下代码中,application_1布局在索引下调用,并且显示用户控制器的操作,并为其他操作调用应用程序布局(默认布局)。
class UsersController < ApplicationController layout "application_1", only: [:index, :show] end
-
在以下代码中,为用户控制器的所有操作调用application_1布局。
class UsersController < ApplicationController layout "application_1" end
-
在以下代码中,application_1布局仅针对用户控制器的testing操作进行调用,对于所有其他操作应用程序布局(默认)都会被调用。
class UsersController < ApplicationController def test render layout: "application_1" end end