Rails tiene una asociación has_one :through
que ayuda a establecer una asociación uno a uno con un tercer modelo pasando por un segundo modelo. ¿Cuál es el uso real de eso, además de hacer una asociación de acceso directo, que de otro modo sería un paso adicional de distancia.Rails has_one: a través de la asociación
Tomando este ejemplo de los rieles guide:
class Supplier < ActiveRecord::Base
has_one :account
has_one :account_history, :through => :account
end
class Account < ActiveRecord::Base
belongs_to :supplier
has_one :account_history
end
class AccountHistory < ActiveRecord::Base
belongs_to :account
end
podría permitirnos hacer algo como:
supplier.account_history
que de otro modo se llegaría como:
supplier.account.history
si se trata de solo para un acceso más simple, entonces técnicamente podría haber una asociación de uno a uno t conecta un modelo con un enésimo modelo que pasa por modelos n-1 para facilitar el acceso. ¿Hay algo más que me falta además del atajo?
Creo que el argumento de la lógica es bastante válido. Suena más natural decir, obtener el historial de cuenta de este proveedor y no el historial de la cuenta del proveedor. Muy sutil, pero aún más fácil de recordar, teniendo en cuenta la filosofía de Ruby/Rails de oraciones fluidas en lugar de código. Sé que podemos ver las consultas DB reales que se emiten, pero, ¿especifica Rails cómo estas llamadas a métodos se traducirían a SQL? – Anurag
Esto también evita violar la Ley de Demeter. –
@TomCrayford, realmente no veo cómo funciona. ¿Esto no hace que la relación sea menos directa? –