Ниже приведен мой прецедент -Rails - Куда должны идти помощники контроллера?
У меня есть метод контроллера (действия), который вызывает вызов API в Google. Я создал класс 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
. Я новичок в рельсах, и я понял, что папка lib
должна иметь сторонний код. Класс Google
здесь может рассматриваться как сторонний класс как его PORO, не имеющий ничего общего с проектом rails или моей бизнес-логикой. Пожалуйста, исправьте меня, если это понимание неверно.
Я могу сохранить этот метод как частный метод в контроллере, но предположим, что существует несколько таких методов. Разве это не сделает контроллер толстым?
Кроме того, контроллер FileApiController
, тогда как все эти методы являются специфическими для Google. У меня также есть методы, специфичные для box и dropbox. В идеале я бы хотел создать классы GoogleHelper
, DropboxHelper
и т. Д., Которые также взаимодействуют с db. Где сохранить эти классы?
Я прихожу из фона Grails, и GoogleHelper
, как правило, делается в качестве службы в Grails, например googleService. Что это за рельсы. В частности, если я делаю класс GoogleHelper
, где его сохранить? Полагаю, вспомогательная папка предназначена только для того, чтобы сохранять помощники вида.
Вы можете удалить код внутри list_items, поскольку вместо этого я буду называть 'Google.list_items'. Ваше решение кажется хорошим, но я думал, что классы под папкой помощников в основном предназначены для помощника вида. является ли распространенной практикой держать помощников контроллера под папкой помощников? – vishesh
Да, его хорошая практика, использовать помощники для контроллеров и просмотра. – 7urkm3n
Кроме того, вы также можете вызвать Helpers 'GoogleHelper.print_hello' в файлах MODEL. – 7urkm3n