[英]How to use a concern in a Rails initializer?
在我的Ruby on Rails项目中,我有一个担忧app/controllers/concerns/common.rb
:
module Common
extend ActiveSupport::Concern
private
def foo
end
end
我想在config/initializers/devise.rb
使用它的foo
函数:
Devise.setup do |config|
...
foo
...
end
现在,我无法以某种方式在config/initializers/devise.rb
加载common.rb
怎么做?
当前,我正在使用一种解决方法-我在config/application.rb
定义了foo
函数,它可以工作,但它违反了DRY原则。
理论上,您可以在devise配置中包含您的关注点:
Devise.setup do |config|
include Common
foo
# ...
end
这样,您如何在ruby的主要对象/顶级上下文中包含该方法。
或者,您可以使用模块扩展'config'(= Devise),然后在config上调用方法foo。
Devise.setup do |config|
config.send(:extend, Common)
config.foo
# ...
end
但是,要使此工作有效,您需要使foo为公共方法,否则您将无法像这样调用它。
如果您的总体目标是避免代码重复,那么就很难告诉您最佳的解决方案是什么,而又不知道要实现的目标,例如,您想从设计配置中提取哪些共享代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.