Tim*_*aas 3 layout ruby-on-rails
在我的宝石中,我只想在特定条件下更改布局.
我知道我可以有一个指定布局的方法,但是如何指向该方法中的当前布局?我已经知道_layout指向布局名称,但如果在指定布局的方法中调用它,则会导致堆栈溢出.
这是我的澄清代码(在我的引擎的应用程序控制器中):
layout :get_layout
def get_layout
current = _layout # this is what I want, but causes a stack overflow
request.path_info.include?( '/baco/' ) ? 'baco' : current
end
Run Code Online (Sandbox Code Playgroud)
例如:具有此gem的应用程序指定了一个名为'qday'的布局,现在如果路径包含'baco',gem需要更改布局,但如果没有,则应该渲染'qday'.
谢谢!
您似乎要做的是始终设置布局,如果您不想更改它,请将其设置为已有的布局.相反,由于递归,我认为你应该只在条件成立时设置布局.
before_filter set_baco_layout
def set_baco_layout
self.class.layout "baco" if request.path_info.include?( '/baco/' )
end
Run Code Online (Sandbox Code Playgroud)
然而,如果您的引擎控制器每个都称为布局,那将是一个更简洁的设计.
class Baco::BatsController < ApplicationController
layout "baco"
...
Run Code Online (Sandbox Code Playgroud)
这可能看起来不干净,但它是一个更干净的步骤.
为了修复DRY,我使用了继承.有一个基本控制器类,用于设置布局并从您的基础继承您的其他控制器.
class Baco::BaseController < ApplicaitonController
layout "baco"
end
class Baco::BatsController < Baco::BaseContoller
...
Run Code Online (Sandbox Code Playgroud)