在Rails中,如何在不浏览数据库的情况下检索属于属性的对象?
-
01-10-2019 - |
题
考虑以下设置:
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正在向父对象查询DB。我想取而代之的是访问现有的内存对象(P),因为我需要访问父级的some_attr值,该值尚未存储在数据库中。有什么办法吗? c.parent(force_reload = false)不会让我到达那里。
解决方案
您可以使用:inverse_of将其设置。阅读更多有关它的信息 这里.
其他提示
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)
(“不要从DB中重新加载”)在这里将解决问题,因为它是一个新鲜的孩子。但是您也可以尝试。
不隶属于 StackOverflow