ActiveRecord中proxy_owner的替代方法

Jef*_*eff 4 activerecord has-many ruby-on-rails-3

ActiveRecord proxy_owner现已弃用,此处的解释非常模糊,如何更改它,所以我不知道如何使用它我的情况:http: //apidock.com/rails/ActiveRecord/Associations/AssociationProxy

这是我正在尝试做的事情:

class Library < ActiveRecord::Base
  has_many :books do
    def some_method
      proxy_owner.author
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我发出警告,不推荐使用proxy_owner:

DEPRECATION WARNING: Calling record.books.proxy_owner is deprecated. Please use record.association(:books).owner instead.
Run Code Online (Sandbox Code Playgroud)

我可以用以下代码替换proxy_owner.author:

@associaton.owner.author
Run Code Online (Sandbox Code Playgroud)

这有效; 然而,这似乎很危险.我在这里错过了什么吗?

Dav*_*lan 18

我认为发送:owner给它更安全proxy_association:

class Library < ActiveRecord::Base
  has_many :books do
    def some_method
      proxy_association.owner.author
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

使用的proxy_association是现在中提到的文档:

但是,在实际的扩展代码中,您将无法访问上述记录(record.association(:items).owner).在这种情况下,您可以访问proxy_association.例如,record.association(:items)和record.items.proxy_association将返回相同的对象,允许您在关联扩展中进行类似proxy_association.owner的调用.