Ruby on rails 访问代理服务器的正确方式';关联扩展中的所有者

Ruby on rails 访问代理服务器的正确方式';关联扩展中的所有者,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,在Rails3.x中,关联扩展似乎发生了很大的变化 我需要访问代理所有者和代理目标(即,has\u many对象和belowns\u to对象) 大多数人建议使用代理\关联.owner和代理\关联.target。但是,这会抛出一个缺少的方法。我找到了一些旧的参考资料(现在找不到),说self.proxy\u target可以工作。然而,这似乎只是间歇性地工作,在我的本地环境和生产环境之间不可靠(奇怪……我知道) 有人知道我在哪里可以找到关于如何使用Rails 3.0.10从关联扩展中访问所有者和

在Rails3.x中,关联扩展似乎发生了很大的变化

我需要访问代理所有者和代理目标(即,has\u many对象和belowns\u to对象)

大多数人建议使用
代理\关联.owner
代理\关联.target
。但是,这会抛出一个缺少的方法。我找到了一些旧的参考资料(现在找不到),说
self.proxy\u target
可以工作。然而,这似乎只是间歇性地工作,在我的本地环境和生产环境之间不可靠(奇怪……我知道)


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

代理关联在Rails 3.1中是新的。rails 3.0.x(和2.x)的等价物是
proxy\u owner
proxy\u target
。但是,
proxy\u target
返回缓存已加载关联的实例变量,即,如果尚未加载关联,您将返回集合关联的
[]
。或者换句话说,给定

class Bar < ActiveRecord::Base
  has_many :foos do
    def target_test
      proxy_target
    end
  end
end
类栏
然后

bar=bar.first
bar.foos.target#u test#=>[]
检查
bar.foos.target#u test#=>

在调用
proxy\u target
之前,可以通过调用
load\u target
强制加载目标。我不知道为什么这很重要-如果你在
self
上调用东西,它会为你转发到目标公司

load\u目标公司成功了!不知道为什么对self调用方法不起作用。谢谢
bar = Bar.first
bar.foos.target_test #=> []
bar.foos.inspect
bar.foos.target_test #=> [#<Foo id: 1 ...>]