【问题标题】:Alternative method for proxy_owner in ActiveRecordActiveRecord 中 proxy_owner 的替代方法
【发布时间】:2011-10-23 12:40:39
【问题描述】:

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

我在运行此代码时收到一条警告,提示 proxy_owner 已被弃用:

DEPRECATION WARNING: Calling record.books.proxy_owner is deprecated. Please use record.association(:books).owner instead.

我可以将 proxy_owner.author 替换为:

@associaton.owner.author

这行得通;但是,这似乎很危险。我在这里遗漏了什么吗?

【问题讨论】:

    标签: ruby-on-rails-3 activerecord has-many


    【解决方案1】:

    我认为将:owner 发送到proxy_association 更安全:

    class Library < ActiveRecord::Base
      has_many :books do
        def some_method
          proxy_association.owner.author
        end
      end
    end
    

    proxy_association的使用现在在documentation中提到:

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

    【讨论】:

    • 这也是我的预期,但它似乎不起作用。我收到一个未定义的方法“proxy_association”错误。
    • 前面的评论适用于 Rails 3.0。 “proxy_owner”在 Rails 3.0 中很好。不过,它在 Rails 3.1 中已被弃用,在 Rails 3.1 中,Dave Nolan 的回答是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 2011-03-03
    • 1970-01-01
    相关资源
    最近更新 更多