1

これに従って、lib コードの独自の構成を作成しようとしています: https://robots.thoughtbot.com/mygem-configure-block

lib/imodule/imodule.rb:

module Imodule
  class << self
    attr_accessor :configuration
  end

  def self.configure
    self.configuration ||= Configuration.new
    yield(configuration)
  end

  class Configuration
    attr_accessor :api_key
    attr_reader :api_url

    def initialize
      @api_url = 'https://api.test.com'
    end
  end
end

初期化子/imodule.rb:

Imodule.configure do |c|
  c.api_key = '4db6-93b3'
end

しかし、私は得ています:

/home/user/Documents/Projects/imodule/config/initializers/imodule.rb:2:in <top (required)>': undefined methodconfigure' for Imodule:Module (NoMethodError)

4

1 に答える 1

1

lib/imodule/imodule.rbのコードが呼び出される前にロードされていない場合にのみ、投稿したコードに問題はありませんconfig/initializers/imodule.rb

これは という Rails アプリimoduleにあるようで、アプリ モジュールとして定義されているため、モジュール コードがロードされていないときにa の代わりに aImoduleだけを使用する理由が説明されています。NoMethodErrorNameError

Rails はディレクトリ内のファイルを自動的に必要としないlibため、ファイルの先頭に追加require 'imodule/imodule'すると問題が解決します。

于 2017-08-07T21:41:38.333 に答える