假设我有以下模型关系:
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),从而允许两个模型编辑同一个对象无需执行数据库保存和重新加载。我有三个问题:
答案 0 :(得分:3)
Rails 3.x支持此功能。例如,您可以使用:inverse_of
关联has_many
关联。 Documentation here(搜索:inverse_of
和Bi-directional associations
)。