2016-04-03 71 views
0

以下是我的使用案例 -Rails - 控制器助手應該去哪裏?

我有一個控制器方法(操作),它會對Google進行API調用。我創建了一個類Google,我已將它放在lib文件夾中。類Google提供了API調用方法。

def self.list_items(folder_id, access_token) 
    result = RestClient.get "#{API_URL}/drive/v2/files", 
          { 
           :Authorization => "Bearer #{access_token}", 
           :params => {:q => "'#{folder_id}' in parents and trashed=false"} 
          } 
    return JSON.parse(result)['items'] 
    end 

不過,我需要編寫從Google調用list_items的方法,捕捉的情況下,到期的access_token,刷新的access_token,在數據庫中保存新的和的access_token再次使list_items調用異常。

由於此方法需要與數據庫交互,因此我不想將它放在lib的類中。我是rails新手,並且我知道lib文件夾應該有第三方代碼。類Google這裏可以被認爲是第三方類,因爲它是一個PORO,與rails項目或我的業務邏輯沒有任何關係。如果這種理解錯誤,請糾正我。

我可以保持這種方法作爲控制器中的私有方法,但假設有多種這樣的方法。這不會讓控制器變胖嗎?

另外,控制器是FileApiController,而所有這些方法都是谷歌特定的。我也有專門針對box和dropbox的方法。我希望創建GoogleHelper,DropboxHelper等類,它們也與db進行交互。在哪裏保持這個類?

我來自Grails背景,GoogleHelper通常會作爲Grails中的服務,如googleService。什麼是軌道的做法。具體而言,如果我製作GoogleHelper課程,在哪裏保留它?我猜,助手文件夾只是保留視圖助手。在控制器GoogleHelper.print_hello

回答

2

app/helpers/google_helper.rb

module GoogleHelper 

class << self 

    def print_hello 
    puts 'HELLO WORLD' 
    end  


    def list_items(folder_id, access_token) 
    result = RestClient.get "#{API_URL}/drive/v2/files", 
          { 
           :Authorization => "Bearer #{access_token}", 
           :params => {:q => "'#{folder_id}' in parents and trashed=false"} 
          } 
    return JSON.parse(result)['items'] 
    end 
end 
end 

如果你想打電話GoogleHelper在控制器,然後在application_controller.rb這個include GoogleHelper

添加它現在你可以打電話給你的幫助創建文件。

+0

您可以刪除list_items中的代碼,因爲我會在這裏調用'Google.list_items'。你的解決方案看起來不錯,但我認爲助手文件夾下的類主要是用於查看助手。將控制器助手保存在助手文件夾下是否是一種常見的做法? – vishesh

+0

是的,它的良好做法,使用助手控制器和視圖。 – 7urkm3n

+0

此外,您也可以在MODEL文件中調用Helpers'GoogleHelper.print_hello'。 – 7urkm3n