Validation 验证与测试;外部API-控制器中的救援还是胖模型验证?

Validation 验证与测试;外部API-控制器中的救援还是胖模型验证?,validation,ruby-on-rails-4,faraday,Validation,Ruby On Rails 4,Faraday,我正在使用从远程salesforce实例查询记录。用户只需为要查询的记录输入有效的UID即可 Restforce用于处理http请求—如果我请求的内容无法在远程salesforce数据库中找到,则会引发Faraday::ResourceNotFound错误 问题 我应该在哪里验证用户输入 我有两个想法,但我不确定每个想法的后果。。。我正在努力找出如何最好地坚持胖模特-瘦控制器的最佳实践 检查应用程序控制器级别的查询是否成功 请求将UID保存到一个简单的ActiveRecord模型@record\

我正在使用从远程salesforce实例查询记录。用户只需为要查询的记录输入有效的UID即可

Restforce用于处理http请求—如果我请求的内容无法在远程salesforce数据库中找到,则会引发
Faraday::ResourceNotFound
错误

问题

我应该在哪里验证用户输入

我有两个想法,但我不确定每个想法的后果。。。我正在努力找出如何最好地坚持胖模特-瘦控制器的最佳实践

检查应用程序控制器级别的查询是否成功

请求将UID保存到一个简单的ActiveRecord模型
@record\u request
。我的create方法可以触发查询、检查错误并在需要时刷新/重定向用户

  # 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
这管用!看起来很好。。。但是

模型级验证?

我的直觉告诉我这是一个验证,应该在模型级别上进行验证,如果有bug和一些东西潜入我的数据库怎么办?如果@record\u请求保存,是否应该在
时刻检查所有这些

如果是的话。。。我如何让模型级代码处理验证,并能够在不破坏MVC的情况下发出外部(OAuth认证的)API请求


这两者的含义是什么?我该如何做得更好?

我认为使用模型级验证的最佳方法如下:

validate :something

def something
  errors.add(:field, 'error message') unless RestClient.check_something
end
其中RestClient是/lib文件夹中的单例对象。这将使控制器保持清洁