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