Alternative method for proxy_owner in ActiveRecord

坚强是说给别人听的谎言 提交于 2019-11-30 17:53:20

问题


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. Please 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?


回答1:


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.



来源:https://stackoverflow.com/questions/7001810/alternative-method-for-proxy-owner-in-activerecord

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!