2011-08-06 28 views
0

我正在使用Gmail Gem。我不想在每次從gmail請求數據時運行Gmail.connect。我想將連接存儲到一個變量中,以便我可以在應用程序的任何位置訪問它。如何讓我的Rails變量可以訪問整個應用程序?

第一次嘗試,我將其存儲到一個全局變量@gmail_session,但我不能訪問時,我嘗試使用遠程調用得到它後的變量。

第二次嘗試,我將連接保存到會話變量會話[:gmail]。我認爲這將是解決辦法,但我得到這個錯誤信息:沒有marshal_dump爲Thread類定義

請幫我保存我的Gmail連接:)

謝謝!

回答

0

Rails的福利局在這裏,所以有可能是出有更好的方法,但這裏是我20這個..

使用application_controller創建加載@gmail_session對象本身有這樣一個公司的方法,實例var並可用於所有控制器/視圖。

例如,

def get_using_remote_call 

    @gmail_session = //do some stuff 

end 

然後你就可以繼續前進,在每次調用該函數的任何控制器的負載,因爲在生產他們的第一負載它們被緩存後,這不應該直到造成問題的application_controller添加after_filter您應用得到10000S探視一天......

做同樣的事情的另一種方法是,包括在config /庫模塊和目錄添加到自動加載在你的config/application.rb中這樣

config.autoload_paths += %W(#{config.root}/lib) 

這會自動加載模塊/類/什麼,然後你可以簡單地調用函數get_using_remote_call,並把它作爲一個對象和IT連鎖,或者你可以

@gmail_session = get_using_remote_call 

或者乾脆在你的控制器的after_filter/before_filter,來使用這個:)

希望這有助於!

+0

我試過了你的第一個建議,但失敗了。這就是我所做的。在我的application_controller中,我有** login_gmain(帳戶)** _create gmail variable_,** logout_gmail ** _empty gmail variable_和** current_gmail ** _return gmail variable_。在頁面的第一次加載時,current_gmail能夠獲得活動的gmail會話,但在遠程調用之後,current_gmail方法不起作用。即使我包含after_filter:current_gmail。有沒有一種很好的方法來實現這一點?幫助我如何:) –

相關問題