【问题标题】:Providing a default layout for views within a namespace为命名空间中的视图提供默认布局
【发布时间】:2011-11-10 13:12:54
【问题描述】:

我的应用中有一系列控制器和相关视图,它们存在于Admin 命名空间中。我希望这些视图使用与主命名空间中的布局不同的布局,以便我可以为它们提供与常规站点不同的外观。有没有办法使用 Rails 的内置功能来做到这一点?我知道如果我有一个 PostController 类并在 layouts 目录中创建一个 posts.html.erb 视图,这将用作任何控制器视图的布局,我可以为命名空间控制器做类似的事情吗?

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

为您要继承的管理员控制器创建自定义 AdminController 类。此 AdminController 继承自 ApplicationController 并覆盖布局。

class AdminController < ApplicationController   
  layout "admin" 
end

class Admin::PostController < AdminController 
end

【讨论】:

  • 请注意,与 Rails 中的大多数 事物不同,布局名称必须String,而不是Symbol。 IE。它必须是layout "admin",而不是layout :admin,而是会产生如下错误:NameError: Could not render layout: undefined local variable or method 'admin' for #&lt;AdminController:0x00007ff135438bd0&gt;
【解决方案2】:

layout 方法中不需要。您应该将命名空间的布局文件放入views/layouts/&lt;namespace&gt;

名称为“foo”的示例命名空间:

控制器:app/controllers/foo/bar_controller.rb

此控制器的布局:app/views/layouts/foo/bar.html.erb

【讨论】:

  • 这意味着您必须为每个命名空间视图创建一个布局
【解决方案3】:

我相信您会在 Ryan Bates 的精彩截屏视频中得到您问题的确切答案。

http://railscasts.com/episodes/269-template-inheritance

(即,如果您使用的是 Rails 3.1)

【讨论】:

    【解决方案4】:

    您可以使用layout 方法覆盖任何控制器的默认布局

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多