2016-02-11 4 views
0

У меня есть следующие соотношения:Объем вложенных ресурсов с использованием пандита

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

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)