当我尝试比较两个Rails模型时,我遇到了问题。它们应评估为相同,但ActiveRecord实现的方式==导致它失败。更奇怪的是单元测试正在通过。
假设用户有很多帖子,帖子有很多评论。用户也有很多评论。
(这是比较两个对象,应该是相同的)
User.first.comments.first == Post.forst.comments.first
当我将object_ids写出到Rails.logger时,它们并不相同。在深入挖掘源代码之后,我发现这种情况使它失败了。
我期待:
User.first.comments.class.object_id == Post.first.comments.class.object_id
但事实并非如此。
该模型包含一个模块,该模块在self.included(base)
中执行以下操作base.send :include, InstanceMethods
base.send :extend, ClassMethods
当我从模型中取出包含时,一切正常。
是否有包含/扩展模式的内容导致模型重新加载或未在同一请求中正确缓存?
这里的任何想法都会很棒!!!
答案 0 :(得分:0)
object_id是实例的ruby id,而不是数据库中行的id。 ActiveRecord覆盖==比较id而不是object_id。