モデルを使用して Gem を作成し (実際には、メイン プロジェクトから抽出しました)、プラットフォーム内のプロジェクト間で共有しました。
何十ものモデルがあるので、1 つずつ要求する代わりに、次のコードを書きました。
Gem.find_files("my_gem/models/*.rb").each { |path| require path }
gem ファイルに my_gem があるプロジェクトの 1 つにアクセスして実行するrails c
と、次の出力が得られます。
/Users/myuser/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/dynamic_matchers.rb:50:in `method_missing': undefined method `has_attached_file' for #<Class:0x007fad4b93ccb8> (NoMethodError)
私のモデルの1つは宝石のペーパークリップを使用していますが、奇妙なのは次のとおりです。
- 上記で宣言された行を削除してすべてのモデルを自動的にロードすると、正常に
rails c
実行されます - ペーパークリップを使用するモデルのみを含めようとすると
require "my_gem/models/paperclip_model"
、同じエラーが表示されます
そこで、モデルをロードしないように gem を変更し、Rails コンソールからモデルを参照しようとすると、クラスがロードされていないと表示されますが、実行するGem.find_files("my_gem/models/*.rb").each { |path| require path }
か、require "my_gem/models/paperclip_model"
「完全に機能し、モデルを操作できます」 .
同じ問題を見た人はいますか?