Rails:对DB行的不同引用引用相同的Ruby对象

时间:2010-11-01 10:29:08

标签: ruby-on-rails-3

假设我有以下模型关系:

class Player < ActiveRecord::Base
  has_many :cards
end

class Card < ActiveRecord::Base
  belongs_to :player
end

我从this question知道Rails会返回一个表示数据库行的对象的副本,这意味着:

p = Player.find(:first)
c = p.cards[0]
c.player.object_id == p.object_id # => false

...因此,如果播放器模型修改self,并且卡片模型在同一请求中修改self.player,则修改将不会相互通知并且最后 - 保存一个将覆盖其他人。

我想解决这个问题(可能是通过某种形式的缓存),因此对具有给定id的Player的所有请求都将返回相同的对象(相同的object_ids),从而允许两个模型编辑同一个对象无需执行数据库保存和重新加载。我有三个问题:

  1. 是否已经有插件或宝石来执行此操作?
  2. 不应这样做有充分的理由吗?
  3. 有人可以给我一些关于如何做到这一点的指示吗?

1 个答案:

答案 0 :(得分:3)

Rails 3.x支持此功能。例如,您可以使用:inverse_of关联has_many关联。 Documentation here(搜索:inverse_ofBi-directional associations)。