1

我刚刚开始学习 Ruby on Rails,而且我知道每次在页面中创建新页面时,app/assets/views页面都会通过layouts/application具有 HTML 标记和<%= yield %>

但是,如果我想创建一个具有不同页面产量(或除了默认应用程序页面之外的不同布局)的主页,我该怎么做才能使其不必通过该默认应用程序?

谢谢!

4

2 回答 2

1

假设您有一个控制器,您可以设置布局:

class HomeController < ApplicationController
  layout 'my_layout'
end

这将使控制器HomeController的所有操作呈现布局“app/views/layouts/my_layout.html.erb”,而不是默认布局。

您还可以为操作指定布局,例如:

class HomeController < ApplicationController
  def index
    render layout: 'my_layout'
  end
end

或者根本不使用布局:

class HomeController < ApplicationController
  def index
    render layout: false
  end
end

您可以在此处找到有关导轨和布局的更多信息

于 2013-04-05T03:11:15.883 回答
1

有几种方法可以实现这一点。

控制器宽

在您的控制器中,您可以使用该layout方法

class MyController < ApplicationController
  layout :name_of_my_layout
end

这将app/views/layout/name_of_my_layout.html.erb用作下所有操作的布局MyController

您还可以传递一个layout返回布局名称的方法

class MyController < ApplicationController
  layout :random_layout

  private

  def random_layout
    %[layout1 layout2 layout3].sample
  end
end

该方法确定每个请求random_layout下的操作要使用的布局。MyController

每次渲染

您可以通过将选项传递layout给呈现调用来覆盖上述选项。

class MyController < ApplicationController
  layout :name_of_my_layout

  def index
    ...
    render layout: false # no layout
  end

  def new
    ...
    render layout: 'my_super_duper_layout_for_the_new_action'
  end
end

命名约定

您可以使用控制器的名称作为布局的名称。例如,您有一个 posts 控制器,如果您有一个app/views/layouts/posts.html.erb, rails 将使用它而不是app/views/layouts/application.html.erb如果您没有在控制器中指定布局。

于 2013-04-05T03:12:44.530 回答