我有一个名为 Clinic 的模型,它的经纬度很长,并且正在使用reverse_geocode
class Clinic < ApplicationRecord
belongs_to :doctor
after_validation :reverse_geocode
reverse_geocoded_by :latitude, :longitude do |obj,results|
if geo = results.first
obj.state = geo.state
obj.country = geo.country
end
end
end
比有一种名为 Doctor 的模式,它具有许多诊所,并且与疾病程度和疾病有关
class Doctor < ApplicationRecord
has_many :clinics
has_many :degrees, dependent: :destroy
has_many :doctor_diseases, dependent: :destroy
has_many :diseases, through: :doctor_diseases
end
我使用html5地理位置获取用户的位置,而不是让他选择按他的姓名,他的学位或疾病搜索医生内。
然后显示匹配搜索条件的每位医生及其距用户10公里以内的诊所与用户的距离。
喜欢
Name | Disease | Degree | Distance
Dr smith | hepatitis | MBBS | 0.5 km
Dr James | coronary | MRCGP | 1.2 km
我能够使用类似的连接来实现
@clinics = Clinic.joins(doctor: [:degrees, :diseases]).where("doctors.first_name ILIKE ? OR doctors.last_name ILIKE ? OR degrees.name =? OR diseases.name =? ", "%#{params[:q]}%", "%#{params[:q]}%","%#{params[:q]}%", "%#{params[:q]}%").near([params[:latitude].to_s, params[:longitude].to_s], 10.0, :units => :km)
但是我不得不再次向每个诊所询问以获取医生及其疾病等信息,并且还会重复记录。
我尝试了包含,但是它不起作用。
我可以用include处理吗? 或其他避免过多查询的方式?