2012-07-16 25 views
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变量?

最佳 菲尔

回答

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 
+0

感谢,这工作。只是有点混淆,返回的dropboxsession对象总是有一个新的实例ID。但它工作正常 – dc10 2012-07-17 20:18:30

相关问题