Rails ha un'associazione has_one :through
che consente di impostare un'associazione one-to-one con un terzo modello passando attraverso un secondo modello. Qual è il vero uso di questo oltre a creare un'associazione di collegamenti, che altrimenti sarebbe un ulteriore passo in più.Rails has_one: tramite associazione
Prendendo questo esempio dalle rotaie 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
potrebbe permetterci di fare qualcosa di simile:
supplier.account_history
che altrimenti raggiungibile come:
supplier.account.history
se si tratta di solo per un accesso più semplice quindi tecnicamente potrebbe esserci un'associazione one-to-one tha t collega un modello con un ennesimo modello che passa attraverso i modelli n-1 per un accesso più semplice. C'è qualcos'altro che mi manca oltre alla scorciatoia?
Penso che l'argomento della logica sia piuttosto valido. Sembra più naturale dirlo, procurami la cronologia dell'account di questo fornitore e non la cronologia dell'account del fornitore. Molto sottile ma ancora più facile da ricordare considerando la filosofia di Ruby/Rails di frasi fluenti piuttosto che di codice. So che possiamo vedere le effettive query DB emesse, ma Rails specifica come queste chiamate di metodo si tradurrebbero in SQL? – Anurag
Ciò evita anche di violare la legge di Demeter. –
@ TomCrayford, non vedo davvero come funziona. Questo non rende la relazione meno diretta? –