以下是我的用例 -
我有一个控制器方法(操作),可以对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
但是,我需要编写一个从list_items
调用Google
的方法,在access_token到期时捕获异常,刷新access_token,在数据库中保存新的access_token并进行list_items
调用再次。
由于此方法需要与数据库进行交互,因此我不想将其放在lib
的类中。我是rails的新手,我已经知道lib
文件夹应该有第三方代码。这里的Google
类可以被视为第三方类,因为它是一个PORO,与rails项目或我的业务逻辑没有任何关系。如果这种理解是错误的,请纠正我。
我可以将此方法保留为控制器中的私有方法,但假设有多种此类方法。不会让控制器发胖吗?
此外,控制器为FileApiController
,而所有这些方法都是谷歌特定的。我也有特定于box和dropbox的方法。理想情况下,我想创建与{db}交互的GoogleHelper
,DropboxHelper
等类。在哪里保留这个课程?
我来自Grails背景,而GoogleHelper
通常会在Grails中作为服务制作,例如googleService。做轨道的方式是什么?具体来说,如果我做一个GoogleHelper
课程,在哪里保留它?我猜,帮助文件夹只是为了保持视图助手。
答案 0 :(得分: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
现在,您可以在控制器中呼叫您的助手:GoogleHelper.print_hello
。