我有以下课程:
class School
belongs_to :zipcode
end
class Zipcode
has_many :schools
belongs_to :city
end
class City
has_many :zipcodes
belongs_to :county
end
class County
has_many :cities
belongs_to :state
end
class State
has_many :counties
end
鉴于国家身份证号,我如何找到所述州内的所有学校?
答案 0 :(得分:1)
您需要使用带有joins
子句的长where
School.joins(zipcode: { city: { county: :state } }).where(states: { id: <STATE_ID> })
答案 1 :(得分:1)
另一种可能的解决方案。如果您使用的是Rails 3.1或更高版本,则可以尝试嵌套has_many :through
class School
belongs_to :zipcode
end
class Zipcode
has_many :schools
belongs_to :city
end
class City
has_many :zipcodes
has_many :schools, :through => :zipcodes
belongs_to :county
end
class County
has_many :cities
belongs_to :state
has_many :schools, :through => :cities
end
class State
has_many :counties
has_many :schools, :through => :counties
end
现在你可以说
State.find(<id>).schools
内部触发此查询
选择“学校”。*来自“学校”INNER JOIN “zipcodes”ON“学校”。“zipcode_id”=“zipcodes”。“id”INNER JOIN “城市”ON“zipcodes”。“city_id”=“城市”。“id”INNER JOIN“县” ON“cities”。“county_id”=“县”。“id”WHERE“县”。“state_id” = 1
答案 2 :(得分:0)
我建议使用joins
...类似于:
School.joins(zipcode: { city: { county: :state } }).where("state.id" => <state_id>)
答案 3 :(得分:0)
或者,如果您经常进行此查询,则可以使范围更容易。东西:
scope :where_state_is, ->(state_name) { joins(:zipcode, :city, :county, :state).where("state.name = ?", state_name ) }
School.where_state_is('NY')