关于这个问题,我有一些想法,但是在实现解决方案之前,我想收集一些信息。
我有一个应用程序,其中新的记录需要手动评估客户服务代理。假设我获得了100个新的客户查询,并且有10个客户代理需要回答这些查询。实现这个队列处理器的最佳方法是什么?值得注意的一点:
我想过的一些解决方案:
有没有人知道最好的解决方案是什么?(我能用宝石来做这类事情吗?)
谢谢。
发布于 2015-01-27 19:44:10
这些问题都很容易解决。您将有一个Customer模型,该模型引用分配给处理该客户的CustomerAgent,因此您的Customer模式中将有一个customer_agent_id字段,这将最初设置为NULL。
您将在Customer模型上创建一个范围,如下所示:
scope :available, -> { where customer_agent_id:nil }...and当您查找客户代理处理的下一个可用记录时,您将使用该范围:
@next_customer = Customer.available.first在使用CustomerAgent关联更新记录时,您还将使用该范围,如以下所示(我假设current_user助手指向当前登录的客户代理):
rows = Customer.available.where(id:@next_customer).update_all(customer_agent_id:current_user)
if rows == 1
# assigned correctly to this agent
else
# agent missed out, loop back and get another customer
end基本上,这将确保SQL语句的结果如下所示:
UPDATE customers SET customer_agent_id = 24 WHERE id = 5 AND customer_agent_id IS NULL;如您所见,如果刚刚为该客户分配了其他代理(因为customer_agent_id不再为NULL ),则该SQL将在DB级别失败,并将返回0。
https://stackoverflow.com/questions/28178006
复制相似问题