默认是在 layout 目录下,可以修改这个么?
ActionController 中有这个方法可以使用 prepend_view_path 方法。你可以在 application before_filter 中这样使用:prepend_view_path 'app/views2/'
#2 楼 @qichunren 代码如下,看能否改。我试验你说的,似乎不行。 class AdminController < ActionController::Base VERSION = 318 layout 'admin' end
ActionPack 里写死了要带 layouts 路径:
https://github.com/rails/rails/blob/master/actionpack/lib/abstract_controller/layouts.rb#L386
def _normalize_layout(value)
value.is_a?(String) && value !~ /\blayouts/ ? "layouts/#{value}" : value
end
所以要绕开这个的话,在你那个 controller 里重写掉到这个方法:
def _normalize_layout(value)
value
end
然后指定你自己的 layout 目录(假设你的 layout 目录在 app/views/my_layouts 目录下):
layout "my_layouts/application"
显然 AbstractController 里的这个方法是框架内部实现,这样改写是有风险也不被推荐的(你永远不知道什么时候这个实现机制会变掉)。但这个方法目前能实现你的要求。