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

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

最好的菲尔

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

要在请求之间保留数据,您应该使用会话。 这可能会有点混乱,因为您确实试图在请求之间保留一个名为@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