(Siehe unten für Link-Projekt zur Probe)Wie zusammen mehrere Modelle unter einem Namen zu einer Gruppe in Single Table Inheritance Klassen
Was habe ich ARBEITEN:
ich viele Benutzer-Typen, die ich Handhabung bin mit Einzel Table Inheritance in Rails, zB:
class User < ActiveRecord::Base
self.inheritance_column = :meta_type
scope :doctors, -> { where(meta_type: 'Doctor') }
scope :patients, -> { where(meta_type: 'Patient') }
scope :nurses, -> { where(meta_type: 'Nurse') }
scope :employees, -> { where(meta_type: 'Employee') }
end
class Doctor < User
has_many :doctor_patient_relations
has_many :patients, :through => :doctor_patient_relations
has_many :doctor_nurse_relations
has_many :nurses, :through => :doctor_nurse_relations
...
# More join tables between each type of user
end
class Patient < User
has_many :doctor_patient_relations
has_many :doctors, :through => :doctor_patient_relations
has_many :nurse_patient_relations
has_many :nurses, :through => :nurse_patient_relations
has_many :employee_patient_relations
has_many :employees, :through => :employee_patient_relations
end
insgesamt ich habe 4 User
Typen: Doctor
, Nurse
, Employee
und Patient
.
Was möchte ich in der Lage sein, ist der Ärzte alle eines Patienten zu tun bekommen, Krankenschwestern und Mitarbeiter mit einem Aufruf wie folgt aus:
@this_patient.providers # => [doctor1, nurse2, employee3]
Um dies zu erreichen, dachte ich über die drei verschiedenen Arten zu entfernen von Join-Tabellen zwischen einem Patienten und einem Provider (z. B. doctor_patient_relations) und ersetzen sie alle durch eine einzige Tabelle namens provider_patient_relations.
NEUE DATEI Ich habe eventuell helfen diese Funktion zu erhalten:
class ProviderPatientRelation < ActiveRecord::Base
belongs_to :provider, class_name: "User", :foreign_key => :provider_id
belongs_to :patient, class_name: "User", :foreign_key => :patient_id
end
und ich auch diese in der User.rb Datei hinzugefügt:
class User < ActiveRecord::Base
...
has_many :provider_patient_relations
has_many :patients, -> { where meta_type: 'Doctor' || 'Nurse' }, :through => :provider_patient_relations, :inverse_of => :patient
has_many :providers, -> { where meta_type: 'Patient' }, :through => :provider_patient_relations, :inverse_of => :provider
end
Das Problem ist, da ich nicht tun haben einen Klassennamen Provider, Schienen wirft einen Fehler:
NoMethodError: undefined method `_reflect_on_association' for Provider:Class
Wie kann ich Schienen sagen in Ärzte zu sehen, Krankenschwestern und Mitarbeiter, wenn Ich rufe @this_patient.providers
an?
EDIT
ich ein Beispielprojekt in der Readme-Anweisungen zum Laufen zu bringen haben, Check-out und es bis zu werden:
https://github.com/waleedasif322/group-user-types-example-rails
es ist schön: ') – achabacha322