我有一個叫做dispatch的模型,它是一個連接表,它與另外兩個模型,引用請求和臨牀醫生相關。在我的應用程序中,工作人員用戶將創建一個轉診請求記錄,其中包含關於他們的病人正在尋找什麼的一些詳細信息。一些未構建的邏輯會查找匹配患者記錄中所述至少一項保險的所有臨牀醫生用戶,並且這將導致向這些臨牀醫生中的每一位發送郵件。調度模型是我如何嘗試記錄推薦請求與臨牀醫生之間的關係,因此我知道哪些臨牀醫生收到了電子郵件,並且我也可以記錄他們的答案(是或否)。使用專家策略來限制另一個類的對象範圍
臨牀醫生也屬於市場,員工屬於屬於市場的大學。
每位臨牀醫生都有臨牀醫師資料,除了clincian_profiles表格外,還有一個clinicalician_profiles_insurances表格,所以我可以給臨牀醫生指定的用戶打電話給.clinician_profile.insurances,並返回他們所有的保險。
根據給定的轉診請求,我還可以致電.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
我的用戶有多個角色:
enum role: { staff: 0, clinician: 1, admin: 2 }
這裏有關係:
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
這裏是我的在急件控制器的新方法:
def new
@clinicians = policy_scope(Dispatch)
@dispatch = @referral_request.dispatches.new
end
這裏是調度表/ new.html.erb這裏我試圖顯示誰
1)是臨牀醫生的所有用戶 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。我有在波士頓分貝的臨牀醫生。我可能會誤解,但在我看來,你寫的查詢搜索並返回調度,但我想我想返回的是臨牀醫生名單。我很可能會錯過一些東西,所以請讓我知道你的想法。 – mike9182
我爲保險等添加了其他模型,以便您可以看到它們。 – mike9182