2014-10-25 3 views
0

Я пытаюсь настроить множество таблиц с использованием рельсов. Я последовал за these instructions from the Rails Guides и считаю, что я правильно настроил схему.Многие для многих настольных рельсов

Хотелось бы, чтобы у вас были все отзывы для конкретного врача.

модели:

class Doctor < ActiveRecord::Base 
    has_many :reviews 
    has_many :users, through: :reviews 
end 

class Review <ActiveRecord::Base 
    belongs_to :user 
    belongs_to :doctor 
end 

class User < ActiveRecord::Base 
    has_many :reviews 
    has_many :doctors, through: :reviews 
end 

Я могу успешно запросить doctor.users, user.doctors и user.reviews. Однако, когда я пытаюсь ответить doctor.reviews, я вижу только пустой прокси #<ActiveRecord::Associations::CollectionProxy []>

Как я могу просмотреть все отзывы для врача?

+1

Что у вас хорошо выглядит. Вы уверены, что на самом деле есть данные для возврата? 'doctor.users' не смог вернуть никаких записей, если' doctor.reviews' не возвращает никаких записей. – meagar

+0

Ты уверен, что он пуст? Возможно, этот ответ говорит только о том, какой ответ вы получаете, что правильно. Проверьте доктор.рецензии. –

+0

@JoaoCunha Интересно. Он пуст, но doctor.reviews.count возвращает 1. – user2954587

ответ

0

Вам нужно изменить:

class User < ActiveRecord::Base 
    has_many :reviews 
    has_many :doctors, through: :reviews 
end 

к:

class User < ActiveRecord::Base 
    has_many :reviews 
    has_many :doctors, through: :reviews, source: :doctor 
end 

Что происходит в том, что пользователь ищет «врач» внутри рецензии, но у вас нет методы для получения «врачей «только« врач ». Если вы укажете исходный атрибут, он назовет ваш запрос «врачи», но он будет выглядеть под «врачом», который в этом случае определяет -. Rails пытается угадать, что это должно быть, и обычно принимает правильное решение, но более явное может решить проблему в этом случае.

+0

(Если я чего-то не хватает) Вам не нужно использовать опцию 'source'. Rails может вывести имя ассоциации из множественного числа. В конечном счете, поскольку отношения проходят «через» обзоры, Rails знает, чтобы присоединиться к пользователям к отзывам на 'reviews.user_id', а затем присоединиться к врачам к отзывам на' reviews.doctor_id', таким образом возвращая всех врачей, которые были рассмотрены этим пользователь. –

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