0

モデルを動的に作成するために、次の Rails 3 モデルを使用しています。

# encoding: UTF-8

require_dependency 'read_only'
require_dependency 'readings_methods'

class Reading < ActiveRecord::Base
  self.abstract_class = true

  include ReadOnly
  include ReadingsMethods

  @@mutex = Mutex.new
  @@children = {}

  def self.with_table(t)
    @@mutex.synchronize do
      child = @@children[t]
      if child.nil?
        child = Class.new(self) do
          self.table_name = t
        end
        @@children[t] = child
      end

      child
    end
  end
end

ただし、デバッグすると、@@childrenページが読み込まれるたびにリセットされるため、すべてのページの読み込みが非常に遅くなります。これを防ぐにはどうすればよいですか?そして、それを引き起こしているのは何ですか?私が子供たちをメモしない限り、Rails は無限ループに入ります。そのため、新しいモデルなどを作成するたびに、少なくともいくつかのクラスがリロードされると思います。この動作を防ぐにはどうすればよいですか?

4

1 に答える 1

1

Rails は開発モードでコードをリロードするので、変更を行うたびに Rails サーバーを再起動する必要はありません (Rails 3.2 では、変更されたコードのみをリロードしようとします)。

クラスがリロードされると、Rails は定数の設定を解除し、新しいコピーをロードするため、特に新しいクラスには新しいクラス変数のセットが含まれます。

ActiveSupport::Dependencies.autoload_once_pathsActiveSupport::Dependencies.autoload_pathsこの方法でリロードされるものを制御します。ファイルへの (フル) パスを autoload_once_paths に追加して、その 1 つのファイルがリロードされるのを防ぐことができるはずです (ただし、レールを再起動する必要があるため、変更内容を確認してください)。

于 2013-03-29T09:18:03.800 に答える