在Ruby on Rails中使用Concurrency Gem获取历史汇率是否可行?
Ruby on Rails 中使用 Concurrency Gem 获取历史汇率的解决方案
可行性结论
完全可行。Concurrency Gem 官方文档仅封装了实时汇率查询方法,但其底层调用的汇率接口原生支持历史数据查询,仅需自行扩展调用逻辑即可。
现有实时调用逻辑
当前官方提供的实时汇率调用方式为:Concurrency.conversion_rate("NZD", "INR")
该方法内部仅构造了实时查询的接口参数,未传递历史查询所需的日期字段。
两种实现方案
方案1:直接调用底层接口
跳过Gem的封装,自行构造请求调用底层汇率接口,仅需额外传入格式为YYYY-MM-DD的查询日期参数即可,无需修改Gem源码,适合临时需求场景。
注意免费版接口通常有单日请求次数、历史查询时间范围的限制,调用前可先确认权限范围。
方案2:扩展Gem方法(低侵入性)
在Rails项目的config/initializers目录下新建补丁文件concurrency_historical_extension.rb,参考Gem原有conversion_rate方法的实现逻辑,新增支持日期参数的历史查询方法,示例代码如下:
module ConcurrencyExtension def self.included(base) base.extend ClassMethods end module ClassMethods def historical_conversion_rate(from, to, query_date) # 复用Gem原有请求校验、签名逻辑,仅新增date参数到接口请求参数中 # 原有实现可查看Gem源码中conversion_rate方法的内部逻辑,对应添加参数即可 end end end Concurrency.include ConcurrencyExtension
扩展完成后即可在业务中直接调用:Concurrency.historical_conversion_rate("NZD", "INR", "2024-03-15")
注意事项
- 历史日期不可早于接口支持的最早查询时间,否则会返回无效数据
- 日期参数必须严格遵守
YYYY-MM-DD格式要求
内容的提问来源于stack exchange,提问作者doer123456789
相关产品推荐
相关产品推荐

