例如,我想停止所有操作的渲染布局。我可以在ApplicationController中编写这段代码及其工作:
layout :false
所以,我想创建一个添加此功能的gem。 我在我的gem的lib中尝试这个代码:
module MyLayout
class Engine < ::Rails::Engine
end
class ApplicationLayoutController < ApplicationController
layout :false
end
end
和此:
module MyLayout
class Engine < ::Rails::Engine
end
class ApplicationController < ActionController::Base
layout :false
end
end
但它不起作用。我该怎么办?
答案 0 :(得分:1)
您只是定义自己的ApplicationController
课程。它存在于您的模块中,如下所示:MyLayout::ApplicationController
。它不会影响仅使用它们的应用程序。
如果您想为gem的用户提供所需的功能,您可以选择几个选项。
“最好的”可能是提供你自己的ActionController::Base
子类,并指示你的用户继承:
module MyLayout
class Engine < ::Rails::Engine
end
class ApplicationLayoutController < ApplicationController
layout :false
end
end
# When using your gem
class MyController < MyLayout::ApplicationLayoutController
# stuff
end
另一种方法是提供一个模块,在包含时运行layout: false
:
module MyLayout
class Engine < ::Rails::Engine
end
module MyLayoutController
def self.included(base)
base.layout(:false)
end
end
end
# When using your gem
class MyController < ApplicationController
include MyLayoutController
end
另一种方式,但可能不是很明智,是修补补丁ActionController::Base
。