开发者

Alternative method for proxy_owner in ActiveRecord

ActiveRecord proxy_owner is now deprecated and the explanation here is very vague on how to change it, so I'm not sure how to use it my case: http://apidock.com/rails/ActiveRecord/Associations/AssociationProxy

Here is what I'm trying to do:

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

I get a warning when I run this code that proxy_owner is deprecated:

DEPRECATION WARNING: Calling record.books.proxy_owner is deprecated. Pleas开发者_运维技巧e use record.association(:books).owner instead.

I can replace proxy_owner.author with:

@associaton.owner.author

This works; however, it seems dangerous. Am I missing something here?


I think it's safer to send :owner to proxy_association instead:

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

The use of proxy_association is now mentioned in the documentation:

However, inside the actual extension code, you will not have access to the record (record.association(:items).owner) as above. In this case, you can access proxy_association. For example, record.association(:items) and record.items.proxy_association will return the same object, allowing you to make calls like proxy_association.owner inside association extensions.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜