如何在Ruby中将专有范围转换为包含范围?

时间:2019-09-23 12:40:11

标签: ruby-on-rails ruby activerecord range

我有一个唯一的整数范围,例如

range = 1000...10001

我宁愿一直使用包容范围,但之所以这样,是因为当我告诉ActiveRecord在PostgreSQL中存储一个包容范围时,当我向其查询时便获得了包容版本。

我想将其转换为包含范围,例如1000..10000

我在做

(range.begin)..(range.end-1)

但是它感觉笨拙且不带红润。

我的整个API都依赖于传递范围,但是我也在考虑讲故事2个值或在Postgres中存储一个数组而不是范围。

有更好的方法吗?


编辑(一些说明)

鉴于范围之间的巨大差异,我想尽可能有效地做到这一点

我的用例是使用范围的开始和结束部分。我实际上不是在遍历它们或检查包含。我只是认为红宝石范围是代表实际范围的好方法,例如显示价格($ 1.000-$ 10.000)

1 个答案:

答案 0 :(得分:3)

我会使用Range#minRange#max

exclusive_range = (1000...10001)
inclusive_range = (exclusive_range.min..exclusive_range.max)
#=> 1000..10000