假设我有以下模型关系:
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
...因此,如果 Player 模型修改 self
,并且 Card 模型在同一请求中修改 self.player
,则这些修改不会执行任何操作互相通知,最后保存的将覆盖其他的。
我想解决这个问题(大概使用某种形式的缓存),以便对具有给定 id 的 Player 的所有请求都将返回相同的对象(相同的 object_ids),从而允许两个模型编辑相同的对象无需执行数据库保存和重新加载。我有三个问题:
- 是否已有插件或 gem 可以执行此操作?
- 有什么充分的理由让我不应该这样做吗?
- 有人可以给我一些关于如何做到这一点的指导吗?
最佳答案
Rails 3.x 中支持此功能。例如,您可以将 :inverse_of
选项用于 has_many
关联。 Documentation here (搜索 :inverse_of
和 双向关联
)。
关于ruby-on-rails-3 - 导轨 : Make different references to a DB row refer to the same Ruby object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4068108/