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

在Rails中,如何在不经过数据库的情况下检索关联上的对象?

  •  5
  • KenB  · 技术社区  · 14 年前

    考虑以下设置:

    class Parent < ActiveRecord::Base
      has_many :children
    end
    
    class Child < ActiveRecord::Base
      belongs_to :parent
    end
    

    >> p = Parent.find 41
    >> p.some_attr = 'some_value'
    >> c = p.children.build
    >> c.parent
    

    通过查看日志文件,我可以看到c.parent正在数据库中查询父对象。我希望访问现有的内存对象(p),因为我需要访问父对象的某个\u attr值,该值尚未存储在数据库中。有什么办法吗?c、 父级(force\u reload=false)不能让我到达那里。

    2 回复  |  直到 14 年前
        1
  •  5
  •   YonahW    14 年前
        2
  •  1
  •   John Bachir    14 年前

    我意识到你的例子可能是为了问你的问题而简化的,但是从一个天真的角度来看——为什么不直接用p而不是c.parent呢?

    另一个可能有用的建议是,将更新保存到数据库的父级:

    p = Parent.find 41
    
    # do this...
    p.some_attr = 'some_value'
    p.save
    
    # OR this...
    p.update_attribute(:some_attr, 'some_value')
    
    c = p.children.build
    c.parent
    

    我不确定 c.parent(false) (“don't reload from the db”)将在这里起作用,因为它是一个新的子对象。但你也可以试试。