【发布时间】:2021-05-04 17:48:35
【问题描述】:
我想生成预订参考号,以便可以通过语音、写下来、发短信等方式轻松传达它们。
我目前使用 uuid,效果很好,但会导致用户体验不佳,因为像 510632cc-3aa4-41c2-8bd0-cbd2bd671ef4 这样的字符串很难交流。
这是一个 Airbnb 预订参考,简短且易于口头交流:
最佳做法
我考虑了一下,决定使用除 O 之外的所有大写字母(并且没有小写字母)和数字 1-9。
这会产生 25 + 9 = 34 个可能的字符。因此可能有
- 34^6 = 1544804416(15 亿)个 6 字符代码
- 或者如果这还不够,34^7 = 52523350144(520 亿)个 7 字符代码
在我的用例中,6 个字符就足够了。
总而言之,booking_reference 应该是由字母 A-Z(O 除外)和数字 1 -9(不是 0)组成的随机字符串,没有小写字母。并且该列必须是唯一的 - 没有重复的字符串。
问题
我是否在上面的想法中封装了最佳实践,并且假设我创建了一个 booking_reference 列来存储字符串,我如何在 bookings#create 控制器操作中生成这些?
注意:我不确定它是否与 ruby 标签相关;如果不相关,请随时删除该标签。
【问题讨论】:
标签: ruby-on-rails ruby database database-design ruby-on-rails-6