2016-10-25 3 views
2

Я хочу заказать has_many through отношения на колонке в таблице черезрельсы 5 has_many через порядок на столе через

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 

и receieve отсутствующий ОТ -clause ошибки PG::UndefinedTable: ERROR: missing FROM-clause entry for table "doctor_specialties"

Как я могу определить порядок на проходе, так что специальности возвращаются в порядке возрастания?

Примечание:

Я был в состоянии получить эту работу, добавив default_scope к DoctorSpecialty

default_scope { order('ordinal ASC') }

Тем не менее, я все еще интересно, если есть способ сделать это has_many through

+0

Что такое SQL, который сгенерирован? –

+0

@DavidAldridge добавил SQL – user2954587

ответ

0

Не уверен, что это то, что вызывает вашу ошибку, но вы еще не закончили. onship на стороне специалиста. Должно быть 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")

+0

, что не было проблемой, но я обновил сообщение, спасибо – user2954587

+0

np. Также добавлен реальный ответ, lmk, если он работает – SomeSchmo

+0

Я действительно хочу использовать include, но комментарий 'joins' полезен. Спасибо что подметил это. решение выше, я думаю, является правильным, которое я ищу с помощью 'default_scope' на' DoctorSpecialty', потому что мне нужно сериализовать специальные функции позже – user2954587

Смежные вопросы