如何解决在保存无法引用之前,工厂机器人有很多关联
我有许多发票订单项的发票模型。在发票模型上,有一个保存前回调,用于总计发票行项目并设置发票上的合计字段:
# invoice.rb model
before_save :set_total
#...
private
def set_total
self.total = invoice_line_items.sum("quantity * price")
end
这是发票工厂:
FactoryBot.define do
factory :invoice do
due_date {30.days.from_now}
notes {"Some notes here,chap."}
paid {false}
paid_date {nil}
factory :invoice_with_line_items do
invoice_line_items { build_list :invoice_line_item,2 }
end
service_order
end
end
和一些测试代码:
RSpec.describe Invoice,type: :model do
let(:invoice) {
create(:invoice_with_line_items)
}
describe "#total" do
it "calculates total of all line items" do
binding.pry
expect(invoice.total).to eq (50.99*4).to_d
end
end
但是,在使用Factory bot的rspec测试中,总数始终设置为0,就好像回调根本没有触发或在创建关联之前触发一样。
如何才能使before save回调起作用,以便看到关联?
解决方法
我发现问题并不出在工厂机器人上,而是我的逻辑在保存前的回调中。 SUM取决于数据库,因此看不到新记录。我将代码更新为以下内容,并且工作正常:
# invoice.rb model before_save callback
def set_total
ili_total = 0
invoice_line_items.each do |ili|
ili_total += ili.quantity * ili.price
end
self.total = ili_total
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。