如何在Rails初始值设定项中使用关注点?
问题描述:
在我的Ruby on Rails项目我有一个担心app/controllers/concerns/common.rb
:如何在Rails初始值设定项中使用关注点?
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
- 如何去做吧?
目前我正在使用一种解决方法 - 我在config/application.rb
中定义foo
函数,它可以工作,但它打破了DRY原则。
答
理论上你可以包括色器件的配置里面你的关心:
Devise.setup do |config|
include Common
foo
# ...
end
这样怎么过你,包括红宝石的主要对象/顶层上下文的方法。
另外,你可以用你的模块扩展'config'(= Devise),并在config上调用foo方法。
Devise.setup do |config|
config.send(:extend, Common)
config.foo
# ...
end
为了使这项工作,但是你需要使foo公开的方法,否则你将无法称之为那样。
如果您的总体目标是避免代码重复,那么很难告诉您什么是最佳解决方案,而无需知道更多关于您想实现的内容的信息,例如,你想从你的设计配置中提取什么共享代码。
谢谢,我用第一种方法。有用。 – prograils