【发布时间】:2016-07-23 07:42:37
【问题描述】:
以下是我的用例 -
我有一个向 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 等类,它们也与数据库交互。在哪里保留这些课程?
我来自 Grails 背景,GoogleHelper 通常会作为 Grails 中的服务(如 googleService)。 rails 的做法是什么。具体来说,如果我创建了一个GoogleHelper 课程,那么该放在哪里?我猜,helper 文件夹只是用来保存视图助手的。
【问题讨论】:
标签: ruby-on-rails