ruby-on-rails - 在关联扩展中访问代理所有者的正确方法

标签 ruby-on-rails ruby-on-rails-3

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

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

recent documentation说要使用 proxy_association.ownerproxy_association.target。但是,这会抛出一个方法丢失。我找到了一些较旧的引用资料(现在找不到),说 self.proxy_target 可以工作。然而,这似乎只能间歇性地工作,并且在我的本地环境和生产环境之间不可靠(奇怪......我知道)。

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

最佳答案

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 ...>]

您可以通过在调用 proxy_target 之前调用 load_target 来强制加载目标。一切就绪 我不确定为什么这很重要 - 如果你在 self 上调用东西,它将被转发给你的目标

关于ruby-on-rails - 在关联扩展中访问代理所有者的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10541464/

相关文章:

ruby-on-rails - RSpec,期望随着多个值的变化而变化

ruby-on-rails-3 - 为什么 :id in Rails 3. 2.3 的批量分配不会引发错误?

ruby-on-rails - 使用现有的 SQL Server 数据库和 Ruby on Rails

database - Rails 无法正确读取 database.yml 中的环境变量

ruby-on-rails - 如何在rails上实现文本提取?

sql - ROR 内连接给出重复值

ruby-on-rails - Rails 一天 12 小时 AM/PM 范围

css - 样式文本数据库输出

ruby-on-rails - 如何从 ruby​​ on Rails 中的字符串中获取双引号字符

ruby-on-rails - Rails 加载页面的时间比预期的要长