3

看起来关联扩展在整个 Rails 3.x 中发生了很大变化。

我需要访问代理所有者和代理目标(即has_many 对象和belongs_to 对象)。

最新的文档说要使用proxy_association.ownerproxy_association.target. 但是,这会导致缺少方法。我找到了一些较旧的参考资料(现在找不到它们),说那self.proxy_target会起作用。然而,这似乎只是间歇性地工作,并且在我的本地环境和生产之间不可靠(奇怪......我知道)。

有人知道我在哪里可以找到关于如何使用Rails 3.0.10从关联扩展中访问所有者和目标的更明确的答案吗?

4

1 回答 1

6

proxy_association是 Rails 3.1 中的新功能。rails 3.0.x(和 2.x)等价物是proxy_ownerproxy_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它将被转发到您的目标

于 2012-05-10T20:48:16.107 回答