看起来整个Rails 3.x中的关联扩展已经发生了很大的变化。
我需要访问代理所有者和代理目标(即has_many对象和belongs_to对象)。
最多recent documentation表示要使用proxy_association.owner
和proxy_association.target
。但是,这会丢失一种方法。我发现了一些较旧的引用(现在找不到它们),说self.proxy_target
可行。然而,这似乎只是间歇性地工作,并且在我的本地环境和生产之间不可靠(奇怪......我知道)。
是否有人知道在哪里可以找到关于如何使用 Rails 3.0.10 在关联扩展中访问所有者和目标的更明确答案?
答案 0 :(得分:5)
proxy_association
是rails 3.1中的新功能。 rails 3.0.x(和2.x)等价物是proxy_owner
和proxy_target
。但是proxy_target
返回缓存关联的实例变量(如果已加载),即如果尚未加载关联,则返回[]
收集关联。或者换句话说,给定
class Bar < ActiveRecord::Base
has_many :foos do
def target_test
proxy_target
end
end
end
然后
bar = Bar.first
bar.foos.target_test #=> []
bar.foos.inspect
bar.foos.target_test #=> [#<Foo id: 1 ...>]
您可以在致电load_target
之前致电proxy_target
来强制加载目标。这一切都设置我不确定为什么这很重要 - 如果你在self
上调用它,它将被转发给你的目标