0

さまざまな方法のコントローラーがあります。最初のメソッドではauthorize、別のメソッドで再利用したいオブジェクトをインスタンス化します。問題は、両方のメソッドのビューが異なり、コントローラーインスタンスが同じままではないことです。

彼女は私のコードです

def authorize
 @session ||= get_session
 puts @session
 @authorize_url = @session.get_authorize_url
end

def list
  puts self
  @session ||= get_session
  @client = DropboxClient.new(@session, ACCESS_TYPE)
  metadata = get_meta_data("/")
  @files = []
  metadata.each do |data|
   @files.push data
  end
  @files
end

では、どうすれば@session変数を再利用できますか?

最高のフィル

4

1 に答える 1

0

あなたは本当にしません。ビューをレンダリングするコントローラーの各パブリックメソッドは、リクエストのエンドポイントとなることを目的としています。リクエストのライフサイクルはそこで終了します。

リクエスト間でデータを永続化するには、セッションを使用する必要があります。@sessionリクエスト間で呼び出されるインスタンス変数を実際に永続化しようとしているため、これは少し混乱する可能性がありますが、それが目的です。

Railsはsession、コントローラーで使用可能なハッシュを介してセッションデータを公開します。Railsがセッションを処理する方法の詳細については、Railsのドキュメントを参照してください。

class YourController < ApplicationController
    def authorize
        @session ||= get_session
        session[:dropbox_session] = @session
    end

    def list
        @client = DropboxClient.new(session[:dropbox_session], ACCESS_TYPE)
    end
end
于 2012-07-16T21:48:12.743 に答える