我有以下关系:
class Patient < ActiveRecord::Base
belongs_to :user
has_many :analyses, dependent: :destroy
end
class Analysis < ActiveRecord::Base
belongs_to :patient
end
在患者中使用范围很简单,我刚刚做了:
class Scope < Scope
def resolve
if user.admin?
scope.all
else
scope.where(user_id: user.id)
end
end
end
但我怎样才能使用解决方法来获取仅属于某一特定患者的所有分析?
现在我的analysis_policy看起来像这样:
class AnalysisPolicy < ApplicationPolicy
def new?
true
end
def edit?
record.patient.user_id == user.id
end
alias_method :show?, :edit?
alias_method :create?, :edit?
alias_method :destroy?, :edit?
end
AnalysesController中的索引操作:
def index
@analyses = @patient.analyses
end
...
private
def set_patient
@patient = Patient.find(params[:patient_id])
end
答案 0 :(得分:0)
Analysis.joins(:patient).where(patient: { user_id: user.id })
应该有效。它可能是where(patients: { user_id: user.id })
我不记得了。因此,作为分析的范围,它将是
class Analysis < ActiveRecord::Base
belongs_to :patient
scope :for_user ->(user_id) { joins(:patient).where(patient: { user_id: user_id })
end
那么你就可以使用Analysis.for_user(user.id)