5

典型的なRailsコントローラーは次のようなことをするかもしれません:

class FoosController < ApplicationController
  def index
    @foos = Foo.all
  end
end

@foosRailsはFooオブジェクトの配列を返すことを十分に理解していますが、@foosそれ自体はインスタンス変数です。

では、インスタンス変数はどのオブジェクトに属しますか?FoosControllerクラスのインスタンスでしょうか?インデックスページにアクセスするたびに、このオブジェクトの異なるインスタンスが作成されますか?@foo新しい変数が導入されたショーページにアクセスした場合はどうなりますか?

def show
  @foo = Foo.find(params[:id])
end

この変数は、@ foosが属するのと同じオブジェクトに属しますか?

4

1 に答える 1

7
  1. 正しい; FoosControllerこれは、現在のリクエストを処理しているインスタンスに属します。
  2. はい、各リクエストはコントローラーの新しいインスタンスを作成します。そのため、インスタンス変数を使用して単一のリクエストの状態を保持できます。
  3. はい。ただし、index呼び出され@foosない場合、初期化されません。1を示すコードでアクションがヒットした@foos場合、インスタンス変数はありません。show

1 から呼び出した場合、は初期化され、ページで使用可能になります。紛らわしい懸念があるので、これを行う必要があるわけではありません。indexshow@foos

于 2012-06-07T00:20:00.063 に答える