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

时间:2010-06-30 19:56:05

标签: ruby-on-rails associations belongs-to

考虑以下设置:

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),因为我需要访问父的some_attr值,该值尚未存储在数据库中。有没有办法做到这一点? c.parent(force_reload = false)不会让我在那里。

2 个答案:

答案 0 :(得分:5)

您可以使用:inverse_of来设置它。阅读更多相关信息here

答案 1 :(得分:1)

ActiveRecord不会努力保证相同数据库对象的内存中对象都是相同的。这是DataMapper确实保证的。

我意识到你的例子可能是简化的,以便提出你的问题,但只是从一个天真的看看它 - 你为什么不用p而不是c.parent?

另一个可能有用的建议,将更新保存到db:

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)(“不从数据库重新加载”)是否会在这里做到这一点,因为它是一个新的Child对象。但你也可以尝试一下。