通过特定表访问关联对象

时间:2014-05-24 18:22:12

标签: ruby-on-rails activerecord ruby-on-rails-4

我有以下内容:

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,查找课程并将它们推送到数组中。

1 个答案:

答案 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