如何保存带有自定义订单的自定义ID,而不会在Rails中出现同步问题

时间:2018-07-31 00:47:37

标签: ruby-on-rails activerecord

我的Rails应用程序中有一个模型对象,我们称之为图片。

数据库中的图片表具有一个名为id的主键列,因为Rails会根据约定自动创建它们,该列仅为1、2、3、4 .....

但是我需要另一个名为custom_id的列来记录其自定义ID,我希望其值为

  • PIC2015-0001PIC2015-0002PIC2015-0003 for 2015年
  • PIC2018-0001PIC2018-0002PIC2018-0003到2018年
  • 等等。

基本上是PICYYYY-NUM_FOR_YEAR,其中YYYY是创建的年份,而NUM_FOR_YEAR是此记录的创建编号(一年中创建的第一条记录将具有0001,第二条记录将具有0002,依此类推...此数字将在每年新的记录中重新启动)

我想通过使用after_create钩子并查看其created_at时间戳以获取年份YYYY来实现这一点,并通过查看带有非空{{1 }}。但是我担心同步问题。如果发生以下情况(或根本不会发生)怎么办?

以下事件按列出的时间顺序发生

  • 创建图片1,调用after_create并完成
  • 已创建图片2
  • 已创建图片3
  • 调用了图片2 after_create-获取图片1的custom_id
  • 调用了图3 after_create-获取图片1的custom_id
  • 创建完成后的图片2
  • 图3 after_created完成-这将具有重复的ID,这是错误的

解决此问题的最简单方法是什么?

0 个答案:

没有答案