Предположим, у меня есть следующие модельные отношения:
class Player < ActiveRecord::Base
has_many :cards
end
class Card < ActiveRecord::Base
belongs_to :player
end
Я знаю из этого вопроса , что Rails вернет мне копию объекта, представляющего строку базы данных, что означает:
p = Player.find(:first)
c = p.cards[0]
c.player.object_id == p.object_id # => false
... и, следовательно, если модель Player изменяет self
, а модель Card изменяет self.player
в том же запросе, то изменения не будут замечать друг друга, а последний сохраненный будет перезаписан остальные.
Я бы хотел обойти эту проблему (предположительно, с использованием некоторой формы кэширования), чтобы все запросы для проигрывателя с заданным идентификатором возвращали один и тот же объект (идентичные идентификаторы объекта), позволяя обеим моделям редактировать один и тот же объект без необходимости выполнять сохранение и перезагрузку базы данных. У меня три вопроса:
- Уже есть плагин или гем для этого?
- Есть ли веские причины, по которым я не должен делать это?
- Кто-нибудь может дать мне несколько советов о том, как это сделать?