Альтернативный метод для владельца прокси в ActiveRecord


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.автор:

@associaton.owner.author

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

1 4

1 ответ:

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

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

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

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