我有三个模型-Patient
,Location
和Area
。
每个患者都属于一个位置,而每个位置都属于区域。
区域具有一个布尔值inpatient
。
我需要选择患者所在的位置,而该位置又属于将住院值设置为true的区域。
我已经尝试了以下方法,但是都没有作用:
@inpatient = Area.joins(:locations).joins(:patients).where(inpatient: true).count
@inpatient = Patient.joins(:location).join(:area).where(area: {inpatient: true})
@inpatient = Patient.joins(:area).where(area: {inpatient: true}).all
@inpatient = Patient.joins(:location).joins(:area).where(area: {inpatient: true}).count
将感谢您的帮助!我想这很简单,而且我遇到了一些基本的错误……我看了其他类似的问题,但是无法将答案重新用于任何可行的事情。
模型
class Patient < ApplicationRecord
belongs_to :location, optional: true
has_one :area, through: :location
end
-
class Location < ApplicationRecord
has_many :patients
belongs_to :area, optional: false
end
-
class Area < ApplicationRecord
has_many :locations
has_many :patients, through: :locations
end
答案 0 :(得分:3)
您很近。您必须在where语句中使用表名,而不是关系名。同样,您必须使用locations参数内的区域。试试这个:
@inpatient = Patient.joins(:location).joins(:area).where(locations: {areas: {inpatient: true}})
答案 1 :(得分:0)
您可以使用关联,它应该产生相同的SQL查询,但是更简单易读
@inpatient = Area.where(inpatient: true).patients