Così qui è una lezione di provaRails has_many attraverso aliasing con la fonte e source_type per più tipi di
class Company < ActiveRecord::Base
has_many :investments
has_many :vc_firms, through: :investments, source: :investor, source_type: 'VentureFirm'
has_many :angels, through: :investments, source: :investor, source_type: 'Person'
end
@ company.angels e @ company.vc_firms funziona come previsto. Ma come vorrei che @ company.investors comprendesse entrambi i tipi di fonte? Ciò funzionerebbe per tutti i polimorfismi nella colonna degli investitori della tabella Investimenti? o forse un modo di usare uno scope per unire tutti i source_type?
modello di investimento simile a questa:
class Investment < ActiveRecord::Base
belongs_to :investor, polymorphic: true
belongs_to :company
validates :funding_series, presence: true #, uniqueness: {scope: :company}
validates :funded_year, presence: true, numericality: true
end
Angeli sono associati attraverso il modello persona
class Person < ActiveRecord::Base
has_many :investments, as: :investor
end
rilevanti associazioni modello organizzazione finanziaria:
class FinancialOrganization < ActiveRecord::Base
has_many :investments, as: :investor
has_many :companies, through: :investments
end
Non funziona. Ecco l'errore: ActiveRecord :: HasManyThroughAssociationPolymorphicSourceError: Impossibile avere has_many: tramite associazione 'Company # investors' sull'oggetto polimorfico 'Investitore # investitore' senza 'source_type'. Prova ad aggiungere 'source_type: "Investitore"' a 'has_many: through' definizione. –
@MichaelKMadison Ho corretto la risposta – polmiro
Hmmm ... quindi dovrei memorizzare persone e organizzazioni finanziarie nello stesso tavolo che non sembra giusto. –