代码之家  ›  专栏  ›  技术社区  ›  Chowlett

Rails:对同一个Ruby对象的DB行进行不同的引用

  •  2
  • Chowlett  · 技术社区  · 15 年前

    class Player < ActiveRecord::Base
      has_many :cards
    end
    
    class Card < ActiveRecord::Base
      belongs_to :player
    end
    

    我是从 this question 铁轨会让我 表示数据库行的对象的,这意味着:

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

    …因此如果玩家模型修改 self ,卡模型将修改 self.player

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

    1. 已经有插件或gem来做这个了吗?
    2. 我有什么理由 不应该 这样做?
    3. 有人能告诉我怎么做吗?
    1 回复  |  直到 9 年前
        1
  •  3
  •   Zabba fl00r    15 年前

    这在Rails3.x中是受支持的 :inverse_of has_many 例如,关联。 Documentation here (搜索 Bi-directional associations ).