我有以下内容:
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
,查找课程并将它们推送到数组中。
答案 0 :(得分: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
注意使用:source,它告诉ActiveRecord
has_many指的是哪个类。然后当您通过并想要所有用户的课程时,您会这样做:user.saved_course_courses + user.course_completion_courses