【发布时间】:2016-09-02 03:24:27
【问题描述】:
我收到了另一个开发人员参与的项目,没有留下任何文档。该代码从购物网站获取一些购买,查找价格并通知用户。
应用程序可能会遇到“未找到结果”等错误,然后我会引发标准错误。
我想将用户重定向到错误页面并通知他们,但我不能这样做,因为它不是控制器,所以redirect_to 选项不起作用。
services/purchase_checker.rb 每小时调用一次:
def call
user.transaction do
store_purchase
if better_purchase?
update_purchase
end
end
rescue MyError=> e
store_error(e)
end
def store_error(error)
user.check_errors.create!(error_type: error.class.name, message: error.message)
end
服务/my_error.rb:
class MyError< StandardError
def initialize(error_type, error_message)
super(error_message)
@error_type = error_type
end
attr_reader :error_type
end
服务/purchase_fetcher.rb:
def parse_result_page
raise purchase_form_page.error if purchase_form_page.error.present?
offer = purchase_page.map{|proposal_section|
propose(proposal_section, purchase) }
.min_by(&:price)
offer or raise MyError.new("No results", "No results could be found")
end
【问题讨论】:
-
您可以发布控制器操作以及调用 PurchaseChecker#call 的位置吗?
-
它被一个activejob调用
-
您的目标不清楚:如果作业每小时运行一次,您建议在请求/响应周期的哪个位置重定向用户?
-
好的,现在看到下面的 cmets 是在初始搜索之后...
-
在用户进行搜索后第一次执行。如果没有找到结果,它应该通知他。如果是的话,每小时都会通知他更优惠的价格...抱歉不清楚,英语不是我的语言
标签: ruby-on-rails ruby model-view-controller error-handling