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" 

https://github.com/barelyknown/layout_by_action

您也可以使用render为动作指定布局:

 def foo render layout: "application" end 

在控制器下指定布局的各种方法:

  1. 在以下代码中,application_1布局在索引下调用,并且显示用户控制器的操作,并为其他操作调用应用程序布局(默认布局)。

     class UsersController < ApplicationController layout "application_1", only: [:index, :show] end 
  2. 在以下代码中,为用户控制器的所有操作调用application_1布局。

     class UsersController < ApplicationController layout "application_1" end 
  3. 在以下代码中,application_1布局仅针对用户控制器的testing操作进行调用,对于所有其他操作应用程序布局(默认)都会被调用。

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