gpt4 book ai didi

ruby-on-rails - 如何增加一个属性,使其值(至少)比其他记录高 1 并且是唯一的

转载 作者:行者123 更新时间:2023-12-04 05:00:15 25 4
gpt4 key购买 nike

我有一个 Payment具有属性的模型 invoice_nr .此属性应在保存之前递增(1)。重要的是所有 payments有一个独特的invoice_nr .

我可以使用 before_save递增 invoice_nr 的回调相对于 Payment.maximum("invoice_nr") 加 1 :

class Payment < ActiveRecord::Base
before_save :increment_invoice_nr

private
def increment_invoice_nr
self.invoice_nr = Payment.maximum("invoice_nr") + 1
end
end

但我认为这并不能确保 invoice_nr 的唯一性.如果两个 payments同时得到保存,理论上他们可以得到相同的 invoice_nr ...对?
invoice_nrs之间有间隔也没关系,但是如果您知道防止这种情况的方法,您将获得奖励积分:)

编辑

有些人建议使用大多数数据库都有的自动增量功能。这可行,但它会将我的应用程序绑定(bind)到我正在使用的特定数据库。因此,自动增量逻辑属于应用程序 imo。

最佳答案

您可以使用数据库序列。

移民:

  def up
execute 'CREATE SEQUENCE tr_num_seq START 10000000;'
end

模型:
class model < ActiveRecord:Base
after_initialize :set_omd_id
def set_unique_number
if self.tr_number.nil?
self.tr_number = ActiveRecord::Base.connection.select_value("select nextval('tr_number_seq')")
end
end
end

每次创建模型对象时,如果尚未设置,它将设置一个唯一的“发票编号 ID”

关于ruby-on-rails - 如何增加一个属性,使其值(至少)比其他记录高 1 并且是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16235520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com