我允许管理员为他们的页面选择不同的布局。现在它只是一个文本输入,他们输入名称。这意味着他们必须提前知道名称。
如果他们输入拼写错误会引发异常,所以我通过在控制器中执行以下操作来检查布局是否存在,如果它不存在则默认为“application”。
lookup_context.template_exists?(@page.layout, "layouts")
如果我可以获得布局列表,我不再需要检查控制器。
我已经看了一下动作视图但什么也没找到。 我可以使用Dir来获取布局文件列表,但我需要包含引擎的所有布局。
所以我想知道是否有人知道如何生成所有可用布局的列表,包括来自引擎的布局?
答案 0 :(得分:3)
按照惯例,所有布局都存在于app/views/layouts
目录中。默认情况下可用的布局是此目录中存在的文件。要获取布局列表,请尝试以下操作:
@layouts = Dir.glob('app/views/layouts/*')
for layout in @layouts
puts layout
end
如果您已按照here所述为应用中的引擎定义了自定义路径,则必须明确添加这些布局:
@layouts << Dir.glob('custom_engine_path/*')