Поддерживается ли синхронизация нескольких экземпляров ActiveRecord автоматически? - PullRequest
2 голосов
/ 17 декабря 2009

Примите этот код

instance1 = MyModel.find(1)
instance2 = MyModel.find(1)

Является ли instance1.equals(instance2) правдой? (т.е. это одни и те же объекты?)

И после этого:

instance1.my_column = "new value"

Содержит ли instance2.my_column также "новое значение"?

Ответы [ 4 ]

3 голосов
/ 17 декабря 2009

weppos совершенно правильно для второй части вашего вопроса. В первой части есть небольшая разница в равенстве в зависимости от того, как вы тестируете.

instance1.eql?(instance2)
  => true

.eql? проверяет, имеют ли объекты одинаковый тип и значение, тогда как

instance1.equal?(instance2)
  => false

.equal? проверяет, имеют ли объекты один и тот же object_id и возвращает false, потому что

instance1.object_id
  => 18277960
instance2.object_id
  => 18271750

На эту тему есть хорошая статья здесь

3 голосов
/ 17 декабря 2009

Нет, это не так. Вы можете синхронизировать 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 изменений в базе данных.

2 голосов
/ 17 декабря 2009
  1. instance1.equals (instance2) не соответствует действительности. В Rails они не являются одинаковыми объектами. AFAIK, в Мербе они бы
  2. instance2.my_column не будет содержать новое значение, если вы не сохраните instance1 и не выполните instance2.reload
0 голосов
/ 04 июня 2013

@ Стив Уит

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.
Кстати: я тестирую в ruby193 / rails4rc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...