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 アプリで定義されたアクティブ レコード クラスにアクセスできなくなりました。

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 に答える