我刚刚开始学习 Ruby on Rails,而且我知道每次在页面中创建新页面时,app/assets/views
页面都会通过layouts/application
具有 HTML 标记和<%= yield %>
但是,如果我想创建一个具有不同页面产量(或除了默认应用程序页面之外的不同布局)的主页,我该怎么做才能使其不必通过该默认应用程序?
谢谢!
我刚刚开始学习 Ruby on Rails,而且我知道每次在页面中创建新页面时,app/assets/views
页面都会通过layouts/application
具有 HTML 标记和<%= yield %>
但是,如果我想创建一个具有不同页面产量(或除了默认应用程序页面之外的不同布局)的主页,我该怎么做才能使其不必通过该默认应用程序?
谢谢!
假设您有一个控制器,您可以设置布局:
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
您可以在此处找到有关导轨和布局的更多信息。
有几种方法可以实现这一点。
控制器宽
在您的控制器中,您可以使用该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
如果您没有在控制器中指定布局。