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在请求之间保留一个调用的实例变量,但这就是它们的用途。

sessionRails 通过控制器中可用的哈希公开会话数据。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 回答