在我的Ruby on Rails项目中,我有一个问题app/controllers/concerns/common.rb
:
module Common
extend ActiveSupport::Concern
private
def foo
end
end
我想在foo
内使用config/initializers/devise.rb
函数:
Devise.setup do |config|
...
foo
...
end
现在我无法以某种方式在common.rb
内加载config/initializers/devise.rb
- 怎么做?
目前我正在使用解决方法 - 我在foo
内定义了config/application.rb
功能,但它确实有效,但它打破了DRY原则。
答案 0 :(得分:1)
理论上你可以在设计配置中包含你的顾虑:
Devise.setup do |config|
include Common
foo
# ...
end
这样你怎么能在ruby的主要对象/顶级环境中包含这个方法。
或者你可以扩展' config' (=设计)与您的模块,并在配置上调用方法foo。
Devise.setup do |config|
config.send(:extend, Common)
config.foo
# ...
end
为了完成这项工作,你需要将foo设为公共方法,否则你将无法像这样调用它。
如果您的总体目标是避免代码重复,则很难告诉您最佳解决方案是什么,而不了解您希望实现的目标,例如:你想从你的设计配置中提取什么共享代码。