Więc tutaj jest klasa próbkaSzyny has_many poprzez aliasing ze źródła i source_type dla wielu typów
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.vc_firms company.angels i działa zgodnie z oczekiwaniami. Ale w jaki sposób mam @ company.investors, które składają się z obu typów źródeł? To zadziałałoby dla wszystkich polimorfizmów w kolumnie Inwestor tabeli Inwestycje? a może sposób użycia zakresu do scalenia wszystkich typów source_type?
Model inwestycyjny wygląda następująco:
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
anioły są powiązane poprzez osoba model
class Person < ActiveRecord::Base
has_many :investments, as: :investor
end
odpowiedniego modelu organizacja finansowa stowarzyszenia:
class FinancialOrganization < ActiveRecord::Base
has_many :investments, as: :investor
has_many :companies, through: :investments
end
Nie działa. Oto błąd: ActiveRecord :: HasManyThroughAssociationPolymorphicSourceError: Nie można mieć powiązania firmowego "Company # investors" has_many: through na obiekcie polimorficznym "Investor # investor" bez "source_type". Spróbuj dodać "source_type:" Investor "" do definicji "has_many: through". –
@MichaelKMadison Poprawiłem odpowiedź – polmiro
Hmmm ... wtedy musiałbym przechowywać ludzi i organizacje finansowe w tym samym stole, co nie jest w porządku. –