【发布时间】:2015-10-30 21:43:07
【问题描述】:
我正在编写一个可配置的 Rails 引擎。我有一个authentication_helper 配置选项来定义在所有需要身份验证的控制器中应该在before_action 中调用哪个助手。
问题是我无法从引擎的控制器访问父应用程序的助手。 My understanding 是因为引擎被隔离了。
我曾考虑使用块而不是方法名称,但我不确定这是否可行,或者我是否能够从我的控制器外部干净地访问授权逻辑。
Active Admin,我以前用过的,也有类似的配置选项。我注意到他们的引擎没有隔离,所以也许我高估了引擎隔离的重要性?
有没有一种优雅的方式来获得引擎隔离的好处,同时还允许这种自定义?还是我应该完全放弃隔离?
编辑#1
Brad Werth 为我指明了正确的方向,因为这适用于继承自 ApplicationController::Base 的常规控制器:
module MyBigFancyEngine
class Engine < Rails::Engine
isolate_namespace MyBigFancyEngine
config.to_prepare do
# Make the implementing application's helpers available to the engine.
# This is required for the overriding of engine views and helpers to work correctly.
MyBigFancyEngine::ApplicationController.helper Rails.application.helpers
end
end
end
但是,我的引擎的ApplicationController 继承自RocketPant::Base,它不提供helper 方法。我尝试使用一个简单的include(它适用于常规控制器),但这也不起作用(控制器找不到帮助器)。
有什么想法吗?
【问题讨论】:
-
你试过我的方法了吗?你看了吗?
标签: ruby-on-rails ruby rails-engines