RAB在HABTM连接表上的过滤条件

时间:2014-04-16 01:13:34

标签: sql ruby-on-rails activerecord scope has-and-belongs-to-many

 class Physician < ActiveRecord::Base
   has_many :appointments
   has_many :patients, through: :appointments
 end

 class Appointment < ActiveRecord::Base
   belongs_to :physician
   belongs_to :patient
   scope :physicals, -> { where appointment_type: 'physical' }
 end

 class Patient < ActiveRecord::Base
   has_many :appointments
   has_many :physicians, through: :appointments
 end

如何在单个查询中使用物理信息访问医生的患者列表?逆向(具有不同类型的不同约会的患者)?我可以用physician.patients_with_physicals = [patient]之类的东西设置它吗?

2 个答案:

答案 0 :(得分:3)

以下内容将允许您在单个查询中获取任何类型的患者:

class Physician < ActiveRecord::Base
  has_many :appointments
  has_many :patients, through: :appointments

  def patients_with_appointment_of_type type
    self.patients.joins(:appointments)
      .where(:appointments => {:type => type})
  end
end

您希望使用physician.patients_with_physicals = [patient]的位置如何计划填写我认为需要的其他约会数据(时间等)?

值得注意的是,Rails使用type列来表示使用单表继承(STI)的模型并可能导致问题,因此我建议使用不同的列名

答案 1 :(得分:0)

  

我如何获得患者名单,对于医生,以及体检者的名单   单一查询?

使用ActiveRecord Association Extensions

#app/models/physician.rb
Class Physician < ActiveRecord::Base
    has_many :appointments
    has_many :patients, through: :appointments do
        def with(type)
           where(appointment_type: type)
        end
    end
end

#-> @doctor.patients.with("physicals")
#-> Patient #1 etc

你能解释一下你的意思:

  

具有不同类型的不同预约的患者)?