バックグラウンド
次のような ActiveRecord の懸念があります。
module Xyz
extend ActiveSupport::Concern
included do
raise "hello" unless table_exists?
# ... here comes the real stuff, which requires
# the table/column definitions to be available ...
end
end
class MyModel < ActiveRecord::Base
include Xyz
self.table_name = 'real_table_name'
end
これを実行すると (よく似たようなものです)、"hello" 例外が発生します。これは、 の時点でinclude Xyz
カスタム テーブル名がまだ設定されていないため table_exists?
ですfalse
。
行を切り替えると、すべてが正常に機能します (つまり、例外はありません)。
class MyModel < ActiveRecord::Base
self.table_name = 'real_table_name'
include Xyz
end
質問
現在の動作 (どちらの場合も) はまったく問題なく、予想どおりですが、発信者にとっては少し不快です。
「ホスト」クラスが完全にロードされるまでコード (この不自然な例では、 ) が遅延するようにモジュール定義を変更する方法はありますか?raise