考虑以下设置:
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)不能让我到达那里。
here .
我意识到你的例子可能是为了问你的问题而简化的,但是从一个天真的角度来看——为什么不直接用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”)将在这里起作用,因为它是一个新的子对象。但你也可以试试。
c.parent(false)