我想在直通表
中的列上订购has_many through
关系
class DoctorProfile
has_many :doctor_specialties
has_many :specialties, through: :doctor_specialties
class Specialty
has_many :doctor_specialties
has_many :doctor_profiles, through: :doctor_specialties
class DoctorSpecialty
belongs_to :doctor_profile
belongs_to :specialty
我希望ordinal
上的专栏DoctorSpecialty
订购专科医生。特别是在使用includes
DoctorProfile.includes(:specialties).all
我已经尝试了
has_many :specialties, -> { order 'doctor_specialties.ordinal' }, through: :doctor_specialties
DoctorProfile Load (0.6ms) SELECT "doctor_profiles".* FROM "doctor_profiles" ORDER BY "doctor_profiles"."id" ASC LIMIT $1 [["LIMIT", 1]]
DoctorSpecialty Load (0.8ms) SELECT "doctor_specialties".* FROM "doctor_specialties" WHERE "doctor_specialties"."doctor_profile_id" = 1
Specialty Load (0.4ms) SELECT "specialties".* FROM "specialties" WHERE "specialties"."id" = 69 ORDER BY doctor_specialties.ordinal
并收到遗漏的FROM -clause错误PG::UndefinedTable: ERROR: missing FROM-clause entry for table "doctor_specialties"
如何定义直通表上的顺序,以便专业按升序返回?
注意:
我能够通过向default_scope
DoctorSpecialty
来实现这一目标
default_scope { order('ordinal ASC') }
但是,我仍然想知道是否有办法在has_many through
答案 0 :(得分:1)
不确定这是否导致您的错误,但您还没有完成在专业方面有很多关系。应为has_many :doctor_profiles, through: :doctor_specialties
对于DoctorProfiles has_many :specialties, through: doctor_specialties
中的这一行,doctor_specialties
需要是一个符号
关于订购,我认为你需要做joins
而不是includes
喜欢DoctorProfile.joins(:doctor_specialties).order("doctor_specialties.ordinal ASC")
答案 1 :(得分:0)
我能够使用它来工作
class DoctorProfile
has_many :specialties, -> { order 'doctor_specialties.ordinal' }, through: :doctor_specialties
end
class DoctorSpecialty < ApplicationRecord
belongs_to :doctor_profile
belongs_to :specialty
default_scope { order('ordinal ASC') }
end