【发布时间】:2011-07-16 16:12:30
【问题描述】:
根据ActiveRecord::Base的文档:
==(comparison_object) 如果 compare_object 完全相同,则返回 true 对象,或 comparison_object 属于 相同的类型和自我有一个ID,它是 等于 compare_object.id。
请注意,新记录是不同的 根据定义,来自任何其他记录, 除非另一条记录是 接收机本身。此外,如果你取 带有选择和离开的现有记录 ID出来了,你自己一个人,这个 谓词将返回 false。
还要注意销毁记录 在模型中保留其 ID 例如,所以删除的模型仍然 可比。
但我的观察表明它只比较实例,而不是 id,因此以下是正确的:
a = Factory.create(:user)
b = User.find_by_email(a.email) # b is logically same as a
a.id.should == b.id # All good
a.should == b # FAILS: Contradicts the docs
a.should_not == b # Contradicts the docs
a.should_not eql b # Contradicts the docs
问题是 2 个 AR 实例被认为是不同的,而文档明确表示它们应该相等?
更新:相等性按预期工作。 上面的代码示例无关。请看下面我的回答。
【问题讨论】:
-
注意:以上文档链接的当前版本位于api.rubyonrails.org/classes/ActiveRecord/…
标签: ruby-on-rails ruby activerecord rspec rspec-rails