如何在同一控制器中的不同方法中使用对象?

时间:2012-07-16 20:44:28

标签: ruby-on-rails controller

我有一个不同方法的控制器。 在第一种方法中,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变量?

最佳

菲尔

1 个答案:

答案 0 :(得分:0)

你没有,真的。控制器中呈现视图的每个公共方法都是请求的端点。请求的生命周期就此结束。

要在请求之间保留数据,您应该使用会话。这可能会有点混乱,因为您确实试图在请求之间保留一个名为@session的实例变量,但这就是它们的用途。

Rails通过控制器中可用的session哈希公开会话数据。有关Rails如何处理会话的更多信息,请参见Rails Documentation

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