看起来关联扩展在整个 Rails 3.x 中发生了相当大的变化。
我需要访问代理所有者和代理目标(即 has_many 对象和 belongs_to 对象)。
最recent documentation说要使用 proxy_association.owner
和 proxy_association.target
。但是,这会抛出一个方法丢失。我找到了一些较旧的引用资料(现在找不到),说 self.proxy_target
可以工作。然而,这似乎只能间歇性地工作,并且在我的本地环境和生产环境之间不可靠(奇怪......我知道)。
有人知道我在哪里可以找到关于如何使用 Rails 3.0.10 从关联扩展中访问所有者和目标的更明确的答案吗?
最佳答案
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 ...>]
您可以通过在调用 proxy_target
之前调用 load_target
来强制加载目标。一切就绪 我不确定为什么这很重要 - 如果你在 self
上调用东西,它将被转发给你的目标
关于ruby-on-rails - 在关联扩展中访问代理所有者的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10541464/