Ruby on rails 增加Rails中的发票数量
我有用户、工作和发票模型。每个用户都可以创建自己的作业,并且每个作业都有发票。现在我需要用户1拥有发票1,发票2。。。。。etc和用户2有发票1、发票2。。。。等等,所以我不能用身份证 现在在invoices表中,我有invoices_number整数列。如何增加此发票号 我在创建之前尝试了:发票号和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
但是我对所有发票都有相同的编号。更改方法的名称,因为它以您拥有的方式覆盖属性名称,当您调用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
向上投票,但提醒他作业完成后确实会被删除,因此需要确认发票是否依赖于作业销毁?向上投票,但提醒他作业完成后确实会被删除,因此需要确认发票是否依赖于作业销毁?