Я использую Restforce для запроса записей из удаленного экземпляра salesforce. Пользователю просто нужно ввести допустимый UID для записи, которую они хотят запросить.Валидация и внешние API-интерфейсы - спасение при проверке модели контроллера или Fatten?
Restforce использует Faraday middleware для обработки запросов HTTP - и вызывает ошибку Faraday::ResourceNotFound
, если я запрашиваю то, что не может быть найдено в базе данных удаленных продаж.
Вопрос
Где я должен подтвердить ввод данных пользователем?
У меня есть две идеи, но я не уверен в последствиях для каждого ... и я пытаюсь разобраться, как лучше всего придерживаться толстой модели - лучшей практики худой контроллер.
Проверка успешного запроса на уровне контроллера приложения
просит сохранить UID на простой модели ActiveRecord @record_request
. Мой метод создания может запускать запрос, проверять наличие ошибки и флешировать/перенаправлять пользователя, если это необходимо.
# app/controllers/record_requests_controller
def create
@record_request = current_user.record_requests.new(record_request_params)
# Check to see if CHAIN number exists
if @record_request.restforce.find("Contact", @record_request.chain_number, 'ClientID__c')
# If it gets past that do standard validation checks
if @record_request.save
flash[:success] = 'Record request was successfully created.'
redirect_to record_requests_path
else
render :new
end
end
end
Тогда над в ApplicationController я получил спасательную установке метода
# app/controllers/application_controller
rescue_from Faraday::ResourceNotFound, with: :resource_not_found
private
def resource_not_found
flash[:alert] = 'Cannot find resource on Salesforce'
redirect_to(:back)
end
Это работает! И кажется прекрасным ... но ...
Проверка уровня модели?
Моя кишка говорит мне, что это проверка и должна быть проверена на уровне модели, что, если в моей базе данных есть что-то, что-то прорывается? Должно ли это все просто быть проверено на момент if @record_request.save
?
Если так ... как я могу получить код уровня модели для обработки проверки и иметь возможность отключить внешний (API) аутентификационный запрос API без нарушения MVC.
Каковы последствия для обоих, и как я могу сделать лучше?