假设此代码
instance1 = MyModel.find(1)
instance2 = MyModel.find(1)
instance1.equals(instance2)
是真的吗? (即它们是相同的物体吗?)
之后:
instance1.my_column = "new value"
instance2.my_column
是否还包含“新值”?
答案 0 :(得分:3)
不,它没有。您可以instance2
与reload
保持同步。
instance1 = MyModel.find(1)
instance2 = MyModel.find(1)
instance1.my_column = "new value"
instance2.my_column
# => old value
instance1.save!
instance2.my_column
# => old value
instance2.reload
instance2.my_column
# => new value
请记住,您必须将instance1
更改保存到数据库中。
答案 1 :(得分:3)
instance1.eql?(instance2)
=> true
.eql?检查对象是否具有相同的类型和值,而
instance1.equal?(instance2)
=> false
.equal?检查对象是否具有相同的object_id并返回false,因为
instance1.object_id
=> 18277960
instance2.object_id
=> 18271750
有一篇关于这个主题的好文章here
答案 2 :(得分:2)
答案 3 :(得分:0)
@Steve Weet
instance1 = User.find(1)
instance2 = User.find(1)
instance1 == instance2 # -> true
instance1.name = "zhangsan"
instance1 == instance2 # true (not false)
instance1.id = 0
instance1 == instance2 # false (this time)
instance1.id = 1
instance1 == instance2 # true (oh..)
所以......这表明rails
检查模型equality
取决于其id
属性。
BTW:我测试的是ruby193 / rails4rc