2015-04-02 4 views
0
Class User 
    has_many :universities 
end 

Class University 
    belongs_to :user 
    has_many :courses 
end 

Class Course 
    belongs_to :university 
end 

Теперь, я хочу найти courses любого пользователя.Запрос вложенной ассоциации

я могу использовать следующий запрос:

User.find(1).universities.collect{|x| x.courses} 

Но есть ли другие простые способы, чтобы получить этот результат? Пожалуйста, объясните свой ответ, чтобы я мог понять. Спасибо заранее!

+0

Первый вопрос. Ожидаете ли вы получить все доступные курсы во всех университетах, которые есть у пользователя? – Coenwulf

+0

Да, ты прав. @Coenwulf – Emu

ответ

3

Добавить в User модели:

has_many :courses, through: :universities 

Теперь вы можете получить все курсы пользователя через:

User.find(1).courses 

От Docs (http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association):

A has_many: через ассоциация часто используется для установления связи «многие-ко-многим» с другой моделью. Эта ассоциация указывает, что модель объявления может быть сопоставлена ​​с нулем или более экземплярами другой модели, пройдя через третью модель.

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