Ruby on rails 为命名空间内的视图提供默认布局

Ruby on rails 为命名空间内的视图提供默认布局,ruby-on-rails,Ruby On Rails,我的应用程序中有一系列控制器和关联视图,它们位于Admin命名空间中。我希望这些视图使用与主名称空间中的视图不同的布局,这样我就可以为它们提供与常规站点不同的外观。有没有一种方法可以使用Rails的内置功能实现这一点?我知道如果我有一个PostController类,并在layouts目录中创建一个posts.html.erb视图,这将用作任何控制器视图的布局,我可以为命名空间控制器做类似的事情吗?您可以使用方法覆盖任何控制器的默认布局为您要继承的管理员控制器创建自定义AdminControll

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

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

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

class AdminController < ApplicationController   
  layout "admin" 
end

class Admin::PostController < AdminController 
end
class AdminController
不需要在
布局中使用
方法。您应该将命名空间的布局文件放入
视图/layouts/

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

控制器:
app/controllers/foo/bar\u Controller.rb


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

我相信您会在Ryan Bates的这段美丽的视频中得到问题的确切答案


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

这意味着您必须为每个带名称空间的视图创建一个布局。这几乎与以下内容重复,并且肯定与以下内容相关:注意,与Rails中的大多数内容不同,布局名称必须是
字符串
,而不是
符号
。也就是说,它必须是
layout“admin”
,而不是
layout:admin
,这将产生如下错误:
NameError:无法呈现布局:未定义的局部变量或#
的方法“admin”。