我刚刚开始学习Ruby on Rails,我知道每次在app/assets/views
中创建新页面时,页面都会通过具有HTML标记的layouts/application
呈现出来。 <%= yield %>
但是,如果我想创建一个具有不同页面产量的主页(或者除了默认应用程序页面之外的不同布局),我该如何操作以便它不必通过该默认应用程序?
谢谢!
答案 0 :(得分: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
您可以找到有关导轨和布局here.
的更多信息答案 1 :(得分: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
命名惯例
您可以使用控制器的名称作为布局的名称。例如,您有一个帖子控制器,如果您有app/views/layouts/posts.html.erb
,如果您没有在控制器中指定布局,则rails将使用此而不是app/views/layouts/application.html.erb
。