如何在Rails初始化程序中使用问题?

时间:2016-08-02 07:25:28

标签: ruby-on-rails

在我的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原则。

1 个答案:

答案 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设为公共方法,否则你将无法像这样调用它。

如果您的总体目标是避免代码重复,则很难告诉您最佳解决方案是什么,而不了解您希望实现的目标,例如:你想从你的设计配置中提取什么共享代码。