Rails: сделать разные ссылки на строку БД ссылкой на один и тот же объект Ruby - PullRequest
2 голосов
/ 01 ноября 2010

Предположим, у меня есть следующие модельные отношения:

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 в том же запросе, то изменения не будут замечать друг друга, а последний сохраненный будет перезаписан остальные.

Я бы хотел обойти эту проблему (предположительно, с использованием некоторой формы кэширования), чтобы все запросы для проигрывателя с заданным идентификатором возвращали один и тот же объект (идентичные идентификаторы объекта), позволяя обеим моделям редактировать один и тот же объект без необходимости выполнять сохранение и перезагрузку базы данных. У меня три вопроса:

  1. Уже есть плагин или гем для этого?
  2. Есть ли веские причины, по которым я не должен делать это?
  3. Кто-нибудь может дать мне несколько советов о том, как это сделать?

1 Ответ

3 голосов
/ 07 ноября 2010

Это поддерживается в Rails 3.x. Например, вы можете использовать опцию :inverse_of для ассоциации has_many. Документация здесь (поиск по :inverse_of и Bi-directional associations).

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