2

我想扩展在我的 rails 应用程序中定义的模型调用配置。出于某种架构上的原因,如果我可以在 gem 中扩展它,那就太好了。

但是在我的 gem foo.rb 文件中,如果我调用我的配置类:

Configuration.class_eval do ... end

它返回给我这个错误:

configuration: undefined method 'config' for nil:NilClass (NoMethodError)

如果我尝试了这个:

class Configuration
  TEST = [:foo, :foo2].freeze
end

我无法再访问我的 rails 应用程序中定义的 activerecord 类。

有没有办法在 gem 中重载一些 rails 类?

编辑:像这样的工作:)

module m
  module ConfigurationExtension

    extend ActiveSupport::Concern

    included do
      CONSTAZ = [:foo].freeze
    end

    module ClassMethods
      def foo1
        "foo1"
      end
    end

    module InstanceMethods
      def foo2
        "foo2"
      end
    end
  end
end

require 'm/mailtie.rb' if defined?(Rails)

在我的 railtie 文件模块 m class mRailtie < ::Rails::Railtie config.after_initialize do ::Configuration.send(:include, ConfigurationExtension) end end end

4

1 回答 1

1

假设您使用 gem 的地方会有特定的类,这是非常错误的。相反,您应该在 gem 中创建一个模块,并在您想要的模型中包含/扩展/关注它(Configuration在这种情况下)

于 2013-06-20T10:33:28.517 回答