In meiner Anwendung erstellen Mitarbeiterdaten Patientenakten. Das Patientenmodell hat eine HABTM-Beziehung zu einem Versicherungsmodell, um die Versicherungen zu erfassen, unter denen der Patient versichert ist.Aktive Datensatzabfrage für Subset-Bedingungen
Mitarbeiter Benutzer erstellen Empfehlungsanfragen, die Patienten gehören. Zu den Mitarbeitern gehören auch die Universitäten, die wiederum zu Märkten gehören. Zum Beispiel könnte der Mitarbeiter Jim zur Harvard University gehören, und die Harvard University wiederum gehört zum Markt Boston.
Kliniker Benutzer gehören direkt zu einem Markt.
Kliniker Benutzer haben jeweils ein clinician_profile, und ihre Profile haben eine HABTM Beziehung mit dem Versicherungsmodell, um die Versicherungen zu erfassen/akzeptiert der Kliniker. ClinicianProfile gehört dem Benutzer wo Rolle:: Kliniker.
Die Rollen sind mit einem Enum definiert:
enum role: { staff: 0, clinician: 1, admin: 2 }
Ein Mitarbeiter Benutzer eine Patientenakte erstellt, die direkt in fließt, einen Verweisungsantrag zu schaffen, die direkt in Versendungen/neue fließt, die ich beabsichtige, eine Liste angezeigt werden von allen Klinikern, die auf ihrem Markt sind und mindestens eine der Versicherungen akzeptieren, für die der Patient versichert ist. Dies ist auf dem Weg, herauszufinden, wie die Überweisungsanfrage und relevante Patientendaten tatsächlich an jeden dieser Kliniker gesendet werden. Ich habe unten gesagt, was ich versuche, mit jedem Schritt zu tun und was nicht funktioniert - jeder Rat, wie man das tut, würde sehr geschätzt werden.
Dispatches-Controller Neue Aktion:
def new
#This works
@patient = @referral_request.patient
#This works
@user = current_user
#This works - returns a list of clinician users who match the current user's university's market.
@market_matched_clinicians = User.clinician.where(market: @user.university.market)
#This doesn't work -My intention is for this to return a list of clinician profiles that share at least one insurance with the patient.
@matched_clinician_profiles = ClinicianProfile.where(insurances: [@patient.insurances])
#Once I have all of the matched clinician profiles, how can I use that to return the corresponding clinician users?
# @matched_clinicians = ???
@dispatch = @referral_request.dispatches.new
end
Modelle:
class User < ApplicationRecord
include Clearance::User
include StaffUser
include ClinicianUser
include AdminUser
module ClinicianUser
extend ActiveSupport::Concern
included do
has_one :clinician_profile
has_many :lists
has_many :universities, through: :lists
has_many :dispatches
has_many :referral_requests, through: :dispatches
after_create :create_clinician_profile
belongs_to :market
validates :market_id, presence: true, if: :clinician?
end
class ClinicianProfile < ApplicationRecord
belongs_to :user, -> { where role: :clinician }
has_and_belongs_to_many :languages
has_and_belongs_to_many :races
has_and_belongs_to_many :insurances
has_and_belongs_to_many :genders
end
class Patient < ApplicationRecord
belongs_to :author, -> { where role: :staff }, class_name: 'User', foreign_key: 'user_id'
has_and_belongs_to_many :genders
has_and_belongs_to_many :concerns
has_and_belongs_to_many :insurances
has_and_belongs_to_many :races
has_many :referral_requests
belongs_to :staff_doctor, class_name: 'User', foreign_key: 'staff_doctor_id'
validates :staff_doctor_id, presence: true
class ReferralRequest < ApplicationRecord
belongs_to :user, -> { where role: :staff }
belongs_to :patient
has_many :dispatches
has_many :clinicians, through: :dispatches
has_and_belongs_to_many :languages
has_and_belongs_to_many :races
has_and_belongs_to_many :genders
validates :user_id, presence: true
enum status: { created: 0, sent: 1, shared: 2, closed_under_care: 3, closed_not_seeking_care: 4, closed_unresponsive: 5 }
end
Dies ist die Ansicht, wo ich diese Ergebnisse zu machen versuchen:
<% provide(:title, "New Dispatch") %>
<h2> These clinicians match your market and your patient's insurance </h2>
<table class="table table-striped">
<thead>
<tr>
<th>Provider ID</th>
<th>Name</th>
<th>Provider Market</th>
<th>Insurances Accepted</th>
<th>Gender/s</th>
<th>Race/Ethnicity</th>
<th>Languages</th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= user.id %></td>
<td><%= user.name %></td>
<td><%= user.market.name %></td>
<td><%= user.clinician_profile.insurances.map(&:name).to_sentence %></td>
<td><%= user.clinician_profile.genders.map(&:name).to_sentence %></td>
<td><%= user.clinician_profile.races.map(&:name).to_sentence %></td>
<td><%= user.clinician_profile.languages.map(&:name).to_sentence %></td>
</tr>
<% end %>
</tbody>
</table>
Danke Max - wenn ich das versuche, bekomme ich einen ActiveRecord Konfigurationsfehler in Dispatches # new. Genauer gesagt heißt es: "Kann 'User' nicht zur Association namens 'clinician_profiles' hinzugefügt werden, vielleicht hast du es falsch geschrieben?". Wenn ich in der Konsole rumstreune, kann ich etwas wie c = User.clinician.first, dann p = c.clinician_profile tun. p.user gibt den Arzt zurück, der das Profil besitzt, aber p.clinician gibt "undefined method 'clinician'" zurück.Ist das das Problem? Muss ich meine Modellassoziationen korrigieren? – mike9182
Ah - sollte 'clinician_profile' im Singular sein. Bearbeitet. – max
Ich entfernte auch den doppelten Markt, den Sie herausgeschnitten haben - im @profiles-Block gibt es einen Rechtschreibfehler des Klinikers in der .group-Zeile, aber nachdem ich diese Dinge geändert habe, erhalte ich den Fehler: SQLite3 :: SQLException: keine solche Spalte: clinician_profile.id – mike9182