5

アプリに含まれているgemのコードでアプリケーションのRailsファイルシステムルートを知ることは可能ですか?

これはgemソースのサンプルです:

module MyGem
  def self.included(base)
    puts Rails.root # return nil
  end
end

ActionController::Base.send :include, MyGem

私の貧弱な英語に感謝し、申し訳ありません

4

2 に答える 2

7

これと同様の問題を修正するために私が見つけた解決策は、railtie初期化子を使用してモジュールを含めることです。

だから、あなたの/lib/mygem/railtie.rbで

module MyGem
  class Railtie < Rails::Railtie
    initializer "Include your code in the controller" do
      ActiveSupport.on_load(:action_controller) do
        include MyGem
      end
    end
end

このコードを使用すると、ActionControllerがロードされた後にモジュールが含まれ、Rails.rootを使用できるようになります。

これがあなたのために働くかどうか私に知らせてください。

于 2012-09-12T19:17:36.590 に答える
2

もちろん:

Rails.root

gemを作成しているからといって、グローバル名前空間にアクセスできないわけではありません。唯一の懸念は、初期化中にRailsモジュールがセットアップされる前にGemがそのアクセスを使用するかどうかです。それが問題であることがわかった場合は、使用しているコードをその場所に投稿してください。問題のデバッグを喜んでお手伝いします。

于 2012-06-29T14:16:44.270 に答える