【问题标题】:Not Rendering the Default Application Layout in Rails 3在 Rails 3 中不呈现默认应用程序布局
【发布时间】:2012-12-30 15:24:24
【问题描述】:

我是 Rails 的入门开发人员,我正在对使用 Ruby 1.8.7 和 Rails 3.0.3 开发的应用程序进行系统研究。在我的应用中,我有一个 application_controller 和一个 application.html.erb 布局和一个 home_controller 和一个 home_html.erb 布局以及 CRUD 视图。然后在我的 routes.rb 中,将默认路由设置为如下所示,以及用于家庭的资源丰富的路由。

root :to => 'home#index'

资源:主页

application.html.rb 中,我们有要呈现的默认布局,需要使用 在其中插入其他视图。但我有另一个布局,名为 home.html.erb,其内容与 application.html.erb 的内容相同。当我运行应用程序时,默认布局是从 home.html.erb 而不是 application.html.erb 加载的。可能是什么原因?

【问题讨论】:

  • 想解释为什么投反对票?

标签: ruby-on-rails ruby layout default


【解决方案1】:

在你的控制器里写

   class TetsController < ApplicationController
      layout "layout_name"
      #...
    end

【讨论】:

  • 我不想渲染任何特定的布局。我需要呈现应用程序布局,它应该默认完成。正确的?这对我来说没有发生。我们没有在 home_controller 中指定布局“家”。那为什么要渲染'home.html.erb'布局呢?
  • 这可能是因为您的控制器名称是“HomeController”而不是“HomesController”。您的控制器名称是单数,但 rails 约定是我们的控制器类是复数,如 ProductsController、BooksController 等...
  • 那为什么是application_controller,为什么不是applications_controller?
  • 我很欣赏你的问题,但不知道这背后的确切原因。 :(
  • 一年多后,你救了我,免得我拔头发。我衷心感谢你。
【解决方案2】:

默认情况下,所有控制器都会调用应用程序布局,但如果你想渲染特定布局,你应该这样做

class HomeController < ApplicationController
   layout 'home'
end

HTH

【讨论】:

  • 我不想渲染任何特定的布局。我需要呈现应用程序布局,它应该默认完成。正确的?这对我来说没有发生。我们没有在 home_controller 中指定布局“家”。那为什么要渲染'home.html.erb'布局呢?
  • 哦,对不起,我误解了你的问题。实际上,偏好是如果您有一个与控制器同名的布局,那么它就会获得偏好。因此,由于您有一个“家庭”布局,因此它优先于“应用程序”布局。所以你有两个选择,1)从 home_controller 调用“应用程序”布局。 2)去掉'home'布局(我觉得(1)更实用)
  • 您能否说明 (1) 是一个不错的选择,因为我们的 application.html.erb 和 home.html.erb 具有相同的内容?另外,为什么我们需要从 home_controller 显式调用应用程序布局,因为它会默认完成?
【解决方案3】:

默认情况下,控制器会首先查找带有 layouts 文件夹中的同名,如果找不到,它将 呈现默认的应用程序布局。

在这种情况下,当执行 home_controller 索引操作时,呈现的布局是 home.html.rb 以及自 home.html 以来的视图内容。 rb 与控制器的命名格式相同。当我将其更改为 homes.html.rb 时,控制器会从 layouts 文件夹中获取 application.html.rb。 所以解决办法是,

只需从 views/layouts/ 文件夹中删除 home.html.erb。它会 默认自动渲染 application.html.erb

谢谢大家。

【讨论】:

  • @Sachin R:感谢您的帮助。
  • @sameera207:感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 2012-02-25
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多