2014-05-24 92 views
1

我有以下幾點:通過特定的訪問表中相關對象

class User < ActiveRecord::Base 

    has_many :saved_courses, dependent: :destroy 
    has_many :courses, through: :saved_courses 

    has_many :course_completions 
    has_many :courses, through: :course_completions 

end 

而且其課程的對應:

class Course < ActiveRecord::Base 

    has_many :course_completions 
    has_many :users, through: :course_completions 

    has_many :saved_courses, dependent: :destroy 
    has_many :users, through: :saved_courses 

end 

基於這些關係,我怎麼得到的所有courses的數組那@user已經保存了?

和我一樣,當我做@user.courses,我希望它抓住它保存的課程,但沒有完成的課程。我試圖做@user.saved_courses.courses但這似乎不是一個有效的操作。而@user.saved_courses.to_a只是返回一個saved_courses數組,而我需要更進一步,並抓取那些saved_course項目表示的課程。

積分:我正在試着用最短,最優雅的方式做到這一點。例如,我不想手動迭代@user.saved_courses.to_a,找到課程並將其推送到數組中。

回答

2

命名爲同一事物的兩個關聯不起作用。你會需要做一些事情的

class User < ActiveRecord::Base 

    has_many :saved_courses, dependent: :destroy 
    has_many :saved_course_courses, through: :saved_courses, source: :course 

    has_many :course_completions, dependent: :destroy 
    has_many :course_completion_courses, through: :course_completions, source: :course 
end 

的使用注意事項的影響:源,它告訴ActiveRecord的的has_many指的是哪一類。然後,當你經歷並想要所有用戶的課程時,你應該這樣做:user.saved_course_courses + user.course_completion_courses

+0

你讓我失望了。好答案。 –

+0

輝煌。謝謝! –