我正在使用Restforce从远程 salesforce 实例中查询记录。用户只需为他们想要查询的记录输入一个有效的 UID。
Restforce 使用Faraday 中间件来处理 http 请求 -Faraday::ResourceNotFound
如果我请求无法在远程 salesforce 数据库中找到的内容,则会引发错误。
问题
我应该在哪里验证用户输入?
我有两个想法,但我不确定每个想法的后果......我正在努力研究如何最好地坚持胖模型 - 瘦控制器最佳实践。
检查应用程序控制器级别的成功查询
请求将 UID 保存到一个简单的 ActiveRecord 模型@record_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
这行得通!而且看起来还不错……但是……
模型级验证?
我的直觉告诉我这是一个验证,应该在模型级别进行验证,如果有错误并且某些东西潜入我的数据库怎么办?现在应该检查这一切if @record_request.save
吗?
如果是这样...我将如何获得模型级代码来处理验证并能够在不破坏 MVC 的情况下触发外部(OAuth 身份验证)API 请求。
对两者都有什么影响,我怎样才能做得更好?