나는 dispatch라는 모델을 다른 두 모델 인 참조 요청 및 임상의와 관련된 조인 테이블로 사용합니다. 내 응용 프로그램에서 직원 사용자는 환자가 찾고있는 것에 대한 세부 정보가 들어있는 조회 요청 레코드를 만듭니다. 작성되지 않은 로직은 환자 기록에 명시된 적어도 하나의 보험에 부합하는 모든 임상의 사용자를 찾게되며, 이로 인해 각 임상의에게 우편 발송자가 발송됩니다. 파견 모델은 추천 요청과 임상의 사이의 관계를 기록하려고 시도하는 방식이므로 어떤 임상의가 이메일을 받았는지 알고 응답을 기록 할 수 있습니다 (예 또는 아니오).pundit 정책을 사용하여 다른 클래스의 개체 범위 제한
임상의는 시장에 속하며 직원은 시장에 속한 대학에 속합니다.
각 임상의는 임상의 프로필이 있으며 clincian_profiles 테이블 외에도 clinician_profiles_insurances 테이블이 있습니다. 그래서 임상가 인 주어진 사용자에게 .clinician_profile.insurances를 호출하고 그들이받는 모든 보험을 반환 할 수 있습니다.
특정 추천 요청에 대해 보험에 전화하여 환자가 보유하고있는 모든 보험을 표시 할 수도 있습니다. 직원 사용자의 대학과 같은 시장에서
- 단지 쇼 임상 사용자 :
나는 다음을 수행하기 위해 파견 새로운 방법 내에서 학자 정책의 범위를 사용하는 것을 시도하고있다.- 추천 요청과 일치하는 보험이 적어도 하나있는 임상의 사용자 만 표시합니다.
시장의 범위를 제한하는 데는 아직까지 최선의 방법이 아닙니다. 내가 도대체 뭘 잘못하고있는 겁니까?
파견 정책
class DispatchPolicy < ApplicationPolicy
class Scope
attr_reader :user, :scope
def initialize(user, scope)
@user = user
@scope = scope
end
def resolve
if user.admin?
scope.all
else
scope.joins(:clinician).merge(User.where(market: user.market))
end
end
end
내 사용자가 여러 역할 : 여기
class Dispatch < ApplicationRecord
belongs_to :referral_request
belongs_to :clinician, class_name: 'User', foreign_key: 'user_id'
class ReferralRequest < ApplicationRecord
belongs_to :user, -> { where role: :staff }
has_many :dispatches
has_many :clinicians, through: :dispatches
module StaffUser
extend ActiveSupport::Concern
included do
belongs_to :university
has_many :patients
has_many :referral_requests
validates :university_id, presence: true, if: :staff?
end
내입니다 : 여기
enum role: { staff: 0, clinician: 1, admin: 2 }
는 관계있다 파견 컨트롤러의 새로운 방법 : 나는
1) 임상의 모든 사용자를 보여주기 위해 노력하고 여기 어디에
def new
@clinicians = policy_scope(Dispatch)
@dispatch = @referral_request.dispatches.new
end
이 파견의 테이블/new.html.erb 2)에 속하는 직원 사용자의 대학과 동일한 시장 3) 추천 요청과 관련된 보험과 일치하는 임상의 프로파일에 최소한 하나의 보험이 있어야합니다.
<% @clinicians.each do |clinician| %>
<tr>
<td><%= clinican.id %></td>
<td><%= clinican.name %></td>
<td><%= clinican.market.name %></td>
<td><%= clinican.clinician_profile.insurances.map(&:name).to_sentence %></td>
<td><%= clinican.clinician_profile.genders.map(&:name).to_sentence %></td>
<td><%= clinican.clinician_profile.races.map(&:name).to_sentence %></td>
<td><%= clinican.clinician_profile.languages.map(&:name).to_sentence %></td>
</tr>
<% end %>
</tbody>
</table>
보험 모델 :
class Insurance < ApplicationRecord
has_and_belongs_to_many :patients
has_and_belongs_to_many :clinician_profiles
has_and_belongs_to_many :markets
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'
def has_referral?
!self.referral_requests.empty?
end
end
**Clinician concern**
require 'active_support/concern'
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_methods do
end
end
직원 우려
require 'active_support/concern'
module StaffUser
extend ActiveSupport::Concern
included do
belongs_to :university
has_many :patients
has_many :referral_requests
validates :university_id, presence: true, if: :staff?
end
class_methods do
end
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
건가요? 범 학파 정책은 내가하려는 일의 전부 또는 일부에 대한 좋은 해결책입니까? 모든 의견에 감사드립니다. 나는 분명히 약간 길을 잃었다.
감사합니다. 내가 제안한대로 사용자를 지정한 다음 콘솔에서 두 번째 줄을 실행하면 실행되지만 비어있는 내용을 반환합니다. user.market은 보스턴 (id : 2)을 반환합니다. 보스톤에 살고있는 DB에 임상의가 있습니다. 나는 오해를할지 모르지만, 작성한 쿼리가 검색을 수행하고 파견을 반환하는 것으로 보입니다. 그러나 제가 반환하고자하는 것은 임상의들의 목록입니다. 나는 아주 잘 빠져있을 수 있습니다, 그래서 제게 당신이 생각하는 것을 알려주십시오. – mike9182
보험 등을위한 추가 모델을 추가하여 보았습니다. – mike9182