我有一个学生有多种产品。可以选择产品来生成发票。这是生成函数:
def generate
@student = @driving_school.students.find(params[:student_id])
@products = @student.products.find(params[:product_ids])
@invoice = @driving_school.invoices.build({student_id: @student.id})
@invoice.reference = @student.full_name
@invoice.products = @products
@invoice.payment_is_due_in = 14
if @invoice.save!
redirect_to @invoice
else
redirect_to @invoice
end
end
发票包含在使用 before_create 过滤器创建发票时生成的行。
class Invoice < ActiveRecord::Base
...
before_create :copy_products_to_lines
...
private
def copy_products_to_lines
self.products.each do |product|
self.lines.build(
invoice_id: self.id,
description: product.name + ' ' + product.description,
amount: product.amount,
price: product.netto,
vat: true,
vat_rate: product.vat_rate,
undeletable: true
)
end
end
在 rails 3.1.3 中,这一直运行良好。自从更新到 3.1.10 以来,由于 Rails 中的最新漏洞,此代码损坏了。发票生成成功,但不再创建行。有谁知道怎么来的?