Альтернативный метод для proxy_owner в ActiveRecord - PullRequest
4 голосов
/ 09 августа 2011

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

Это работает; однако это кажется опасным. Я что-то здесь упускаю?

1 Ответ

18 голосов
/ 09 сентября 2011

Я думаю, что безопаснее отправить :owner на proxy_association вместо:

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

Использование proxy_association теперь упоминается в документации :

Однако, внутри действительного кода расширения у вас не будет доступа к запись (record.association (: items) .owner), как указано выше. В этом случае вы можете получить доступ к proxy_association. Например, record.association (: items) и record.items.proxy_association вернет тот же объект, позволяя вам звонить как proxy_association.owner внутри ассоциации расширения.

...