[解決済み] xxxのコピーはモジュールツリーから削除されましたが、まだアクティブです。
質問
の実際の内容とは関係ないことは確かです。
TenantIdLoader
モジュールの実際のコンテンツとは関係がないことは確かです。代わりに、それは
ActiveSupport
依存関係があります。
私はこのエラーを乗り越えることができないようです。私が読んだところでは、それはどちらかが
ActiveRecord::Base
が再読み込みされているか
Company::TenantIdLoader
が再読み込みされているのに、なぜかそれが伝わらないのです。助けてください!お願いします Rails 4.2にアップグレードされることを強く望んでいます。
EDIT
を参照しているからだと今更ながら知りました。
Tenant
を参照しているからだということがわかりました。しかし、私は実際にクラスを参照できるようにする必要があるので、誰かこれを回避する方法を知っていますか?
config/application.rb
config.autoload_paths += %W( #{config.root}/lib/company )
config/initializers/company.rb
ActionMailer::Base.send(:include, Company::TenantIdLoader)
lib/company/tenant_id_loader.rb
module Company
module TenantIdLoader
extend ActiveSupport::Concern
included do
cattr_accessor :tenant_dependency
self.tenant_dependency = {}
after_initialize do
self.tenant_id = Tenant.active.id if self.class.tenant_dependent? and self.new_record? and Tenant.active.present? and !Tenant.active.zero?
end
end
# class methods to be mixed in
module ClassMethods
# returns true if this model's table has a tenant_id
def tenant_dependent?
self.tenant_dependency[self.table_name] ||= self.column_names.include?('tenant_id')
end
end
end
end
どのように解決するのですか?
Tenant
は赤信号のようなもので、rails'で読み込む必要のあるアプリのビットを参照した場合にエラーが発生します。
const_missing
トリックによってロードされる必要があるアプリを参照するとエラーが発生します。
問題は、リロード可能なもの (あなたのモジュール) を、リロード不可能なもの (
ActiveRecord::Base
または、先ほどの例で言えば
ActionMailer::Base
). ある時点でコードがリロードされると、railsがアンロードしたと思っていても、ActiveRecordにはまだこのモジュールが含まれています。Tenantを参照したときにエラーが発生するのは、railsがその
const_missing
フックを実行し、Tenantがどこからロードされるべきかを検索するため、定数検索が開始されるモジュールが存在しないはずなので、そのコードはパニックになります。
3つの可能な解決策があります。
-
必要に応じて個々のモデルやコントローラに含めるか、抽象的な基底クラスを作成し、そこにモジュールを含めるかです。
-
このモジュールを autoload_paths 以外の場所に保存して、リロードできないようにします (rails が魔法のようにロードしなくなるので、明示的に要求する必要があります)。
-
Tenantを::Tenantに変更する (
Object.const_missing
が呼び出されます。Tenant.const_missing
)
関連
-
[解決済み】なぜRuby on Railsは、http://localhost:3000 の代わりに http://0.0.0.0:3000 を使用するのですか?
-
[解決済み】取得中。「プロジェクトのクローンとマイグレート後に、「マイグレーションは保留中です。この問題を解決するには 'bin/rake db:migrate RAILS_ENV=development' を実行してください。
-
[解決済み] どのようにrailsでラジオボタンを正しく使用するには?
-
[解決済み] Ruby on Railsのランナー
-
[解決済み] PG::ConnectionBad - サーバーに接続できませんでした。接続が拒否されました。
-
[解決済み] Paramが無いか、値が空である。ParameterMissing in ResultsController#update
-
[解決済み] Ruby: public static メソッドを作るには?
-
[解決済み] サーバーはRailsで既に稼働している
-
[解決済み] railsでcheck_boxをcheckedにする方法は?
-
[解決済み] ActionController::RoutingError: 初期化されていない定数MicropostsController
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】bundle installが "Could not locate Gemfile "を返す。
-
[解決済み】gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み】ActionController::InvalidAuthenticityTokenについて
-
[解決済み】Rails 4 RoutingError: ルートが一致しない[POST]。
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜでしょうか?
-
[解決済み] Rubyの文字列から日付への変換
-
[解決済み] erbでコメントを追加する最適な方法
-
[解決済み] どなたか、collection_selectをわかりやすく説明していただけませんか?
-
[解決済み] Ruby on Railsのためにnetbeansを構成する方法は?
-
[解決済み] RubyとRailsの "Date.today "フォーマット