0

バックグラウンド

次のような 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

4

0 に答える 0