Ruby on rails 增加Rails中的发票数量

Ruby on rails 增加Rails中的发票数量,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有用户、工作和发票模型。每个用户都可以创建自己的作业,并且每个作业都有发票。现在我需要用户1拥有发票1,发票2。。。。。etc和用户2有发票1、发票2。。。。等等,所以我不能用身份证 现在在invoices表中,我有invoices_number整数列。如何增加此发票号 我在创建之前尝试了:发票号和 但是我对所有发票都有相同的编号。更改方法的名称,因为它以您拥有的方式覆盖属性名称,当您调用invoice.invoice\u number时,它将调用该方法并返回invoice.maximumin

我有用户、工作和发票模型。每个用户都可以创建自己的作业,并且每个作业都有发票。现在我需要用户1拥有发票1,发票2。。。。。etc和用户2有发票1、发票2。。。。等等,所以我不能用身份证

现在在invoices表中,我有invoices_number整数列。如何增加此发票号

我在创建之前尝试了:发票号和


但是我对所有发票都有相同的编号。

更改方法的名称,因为它以您拥有的方式覆盖属性名称,当您调用invoice.invoice\u number时,它将调用该方法并返回invoice.maximuminvoice\u number+1,而不是数据库中存储的属性:

before_create :set_invoice_number

def set_invoice_number
  self.invoice_number = self.user.invoices.maximum("invoice_number") + 1
end

更改方法的名称,因为它以您拥有的方式覆盖属性名称,当您调用invoice.invoice\u number时,它将调用该方法并返回invoice.maximuminvoice\u number+1,而不是数据库中存储的属性:

before_create :set_invoice_number

def set_invoice_number
  self.invoice_number = self.user.invoices.maximum("invoice_number") + 1
end

虽然AbM的答案是正确的,但我认为在这种情况下,添加uniques验证也很重要:

# in your invoice model:
validates :invoice_number, uniqueness: { scope: :user }

before_validation :generate_invoice_number

private
def generate_invoice_number
  self.invoice_number = user.invoices.maximum(:invoice_number).next
end
此外,我将添加一个数据库约束,以确保即使在不太可能发生的竞争情况下,这些数字对每个用户都是唯一的:

add_index :invoices, [:user_id, :invoice_number], unique: true

虽然AbM的答案是正确的,但我认为在这种情况下,添加uniques验证也很重要:

# in your invoice model:
validates :invoice_number, uniqueness: { scope: :user }

before_validation :generate_invoice_number

private
def generate_invoice_number
  self.invoice_number = user.invoices.maximum(:invoice_number).next
end
此外,我将添加一个数据库约束,以确保即使在不太可能发生的竞争情况下,这些数字对每个用户都是唯一的:

add_index :invoices, [:user_id, :invoice_number], unique: true

向上投票,但提醒他作业完成后确实会被删除,因此需要确认发票是否依赖于作业销毁?向上投票,但提醒他作业完成后确实会被删除,因此需要确认发票是否依赖于作业销毁?