叮嘱代表们

时间:2010-03-05 17:43:33

标签: ruby-on-rails rspec

我记下了这个子集?方法
subset.stub(?:结算)。and_return(真)

line_item有开帐单代表吗?对子集进行计费?

当我调用方法时,会发生以下情况

(rdb:1) subset.billed?  
true  
(rdb:1) subset.line_items[0].billed?  
false  
(rdb:1) subset === subset.line_items[0].order_subset  
true  
(rdb:1) subset.billed? == subset.line_items[0].subset.billed?  
false  

在第一次通话时它起作用 在第二个我称之为委托关系的账单方法和存根故障 在第三个我检查line_item-relation的子集和subest是否是相同的模型及其真实的 在第四个我比较直接在子集上调用的相同方法的输出,并间接地在关系上,它失败

有没有人有这个?

1 个答案:

答案 0 :(得分:1)

subset和subset.line_items [0] .order_subset确实是不同的对象。 ===两个对象最终使用以下逻辑:

http://github.com/rails/rails/blob/master/activerecord/lib/active_record/base.rb#L1906-1910

要明白我的意思,请运行:

subset.object_id == subset.line_items[0].order_subset.object_id

你会看到你弄错了。

这对activerecord来说有些问题。如果你有反向关联,而不是引用你已经加载的模型,它会加载一个全新的记录副本。