Ruby on Rails:阻止通过默认应用程序执行新页面

时间:2013-04-05 03:06:31

标签: ruby-on-rails

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

但是,如果我想创建一个具有不同页面产量的主页(或者除了默认应用程序页面之外的不同布局),我该如何操作以便它不必通过该默认应用程序?

谢谢!

2 个答案:

答案 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