Je dispose de plusieurs types d'utilisateurs définis dans un seul modèle utilisateur:profils en cours de création sans clés étrangères dans le modèle lié
enum role: { staff: 0, clinician: 1, admin: 2 }
utilisateurs cliniciens ont chacun un profil clinicien qui est créé automatiquement à l'aide after_create, et je suis l'intention pour stocker l'ID clinician_profile sur la table des utilisateurs. Pour une raison quelconque, lorsque les profils de clinicien sont créés, clinician_profile_id reste null sur la table des utilisateurs pour tous les utilisateurs, y compris les utilisateurs cliniciens. Comment puis-je résoudre ce problème?
Module ClinicianUser
extend ActiveSupport::Concern
included do
belongs_to :clinician_profile
has_many :lists
has_many :universities, through: :lists
has_many :dispatches
has_many :referral_requests, through: :dispatches
after_create :create_clinician_profile, if: :clinician?
belongs_to :market
validates :market_id, presence: true, if: :clinician?
end
class_methods do
def create_clinician_profile
self.clinician_profile.create!
end
end
end
classe ClinicianProfile < ApplicationRecord
has_one :user, -> { where role: :clinician }
end
schéma de la table des utilisateurs:
create_table "users", force: :cascade do |t|
t.string "email"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "password_digest"
t.string "remember_digest"
t.string "activation_digest"
t.boolean "activated", default: false
t.datetime "activated_at"
t.string "reset_digest"
t.datetime "reset_sent_at"
t.string "encrypted_password", limit: 128
t.string "confirmation_token", limit: 128
t.string "remember_token", limit: 128
t.datetime "confirmed_at"
t.integer "role", default: 0
t.string "first_name"
t.string "last_name"
t.integer "university_id"
t.boolean "approved", default: false
t.integer "market_id"
t.integer "clinician_profile_id"
t.index ["clinician_profile_id"], name: "index_users_on_clinician_profile_id"
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["market_id"], name: "index_users_on_market_id"
t.index ["remember_token"], name: "index_users_on_remember_token"
Pouvez-vous ajouter la méthode 'create_clinician_profile'? – max
Je n'ai pas de méthode explicite pour cela - Il est actuellement géré exclusivement par cette ligne dans le module de préoccupation du clinicien: after_create: create_clinician_profile, si:: clinician? – mike9182
Essayez de créer explicitement une méthode 'def create_clinician_profile; self.clinician_profile.create !; end'' – max