0

アクションでインスタンス変数を定義すると、同じコントローラーに属する他のアクション内では使用できませんか?

インスタンス変数は、クラス全体で使用できる必要があります。右?

    class DemoController < ApplicationController

  def index
    #render('demo/hello')
    #redirect_to(:action => 'other_hello')

  end

  def hello
    #redirect_to('http://www.google.co.in')
    @array = [1,2,3,4,5]
    @page = params[:page].to_i
  end

  def other_hello
    render(:text => 'Hello Everyone')
  end

end

インデックスで配列を定義し、helloビューからアクセスすると、nilのfalse値に対してエラーが発生するのはなぜですか?

4

2 に答える 2

4

Railsはリクエストごとにコントローラーの新しいインスタンスを作成するため、インスタンス変数はリクエスト(コントローラーとビューのレンダリング)中にのみ使用できます。

リクエスト間でデータを保持したい場合は、セッションを使用してください。

于 2013-01-02T10:22:09.907 に答える
0

アクションでインスタンス変数を定義すると、そのindexアクションでのみ使用可能になります。2つのアクションに同じインスタンス変数を定義する場合は、次の2つのいずれかを実行できます。

def index
  set_instance_array
  ...
end

def hello
  set_instance_array
  ...
end

...

private
def set_instance_array
  @array = [1,2,3,4,5]
end

これを頻繁に行う場合は、beforeフィルターを使用できます。

class DemoController < ApplicationController
  before_filter :set_instance_array

  def index
    ...
  end
  ...
end

これにより、すべてのリクエストの前にset_instance_arrayメソッドが呼び出されます。詳細については、http: //guides.rubyonrails.org/action_controller_overview.html#filtersを参照してください。

于 2013-01-02T15:12:44.247 に答える