1

ARクラスの1つにクラスインスタンス変数があります。イニシャライザーを使用して起動時にその値を設定し、その後、読み取りを行う場合を除いて、再度タッチすることはありません。開発モードでは、この値はWebサーバーへの最初の要求後に消えます。ただし、テストを実行する場合、コンソールを使用する場合、または運用サーバーを実行する場合、これは発生しません。

# The AR class
class Group < ActiveRecord::Base

  class << self
    attr_accessor :path
  end

end

# The initializer
Group.path = File.join(RAILS_ROOT, "public", "etc")

# First request in a view
%p= Group.path #=> "/home/rails/app/public/etc"

# Second request in a view
%p= Group.path #=> nil

リクエストごとにクラスからインスタンス変数を削除する開発モードについて何かありますか?もしそうなら、特定の変数またはクラスに対してこれを無効にする方法はありますか?

4

1 に答える 1

0

開発モードでは、クラスはキャッシュされません。つまり、リクエストごとにすべて再ロードされます。テストおよび本番モードでは、それらはキャッシュされます。これは、クラス インスタンス変数が生き残ることを意味します。キャッシュ設定は、config/environments の関連ファイルで設定されます。

1 つの回避策は、イニシャライザでグローバル変数または環境変数を設定し、その値を返すようにクラス レベルのアクセサを定義することです。

于 2009-08-10T20:03:03.363 に答える