Carga ansiosa, dependendo do tipo de associação no Ruby on Rails
Eu tenho uma associação polimórfica (belongs_to :resource, polymorphic: true
) Onderesource
pode ser uma variedade de modelos diferentes. Para simplificar a questão, assuma que ela pode ser umOrder
ou umCustomer
.
Se é umOrder
Gostaria de pré-carregar o pedido e pré-carregar oAddress
. Se for um cliente, eu gostaria de pré-carregar oCustomer
e pré-carregue oLocation
.
O código usando essas associações faz algo como:
<%- @issues.each do |issue| -%>
<%- case issue.resource -%>
<%- when Customer -%>
<%= issue.resource.name %> <%= issue.resource.location.name %>
<%- when Order -%>
<%= issue.resource.number %> <%= issue.resource.address.details %>
<%- end -%>
Atualmente, minha pré-carga usa:
@issues.preload(:resource)
No entanto, ainda vejo problemas de mais de um para carregar as associações condicionais:
SELECT "addresses".* WHERE "addresses"."order_id" = ...
SELECT "locations".* WHERE "locations"."customer_id" = ...
...
Qual é uma boa maneira de corrigir isso? É possível pré-carregar manualmente uma associação?