2015-05-09 4 views
0

Я использую 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.

Каковы последствия для обоих, и как я могу сделать лучше?

ответ

0

Я думаю, что лучший способ использовать модель проверки уровня что-то вроде этого:

validate :something 

def something 
    errors.add(:field, 'error message') unless RestClient.check_something 
end 

Где RestClient это единичный объект, в/LIB папке. Это позволит сохранить контроллер чистым.

 Смежные вопросы

  • Нет связанных вопросов^_^