Active Record Single Table继承连接表

时间:2014-07-10 17:25:00

标签: activerecord jointable sti

我有一个用户表和一个课程表。在用户模型之上,我使用STI来拥有教师和学生模型。

一位老师有很多课程,但是一个学生有___belongs_to_man_课程。

一门课程属于一名教师,并且已经和一些学生一同学习。

我正在尝试访问学生的课程,但AR正在寻找一个名为courses_users的联接表,而我的名为courses_students。

Student.find(100).courses
  Student Load (0.8ms)  SELECT  "users".* FROM "users"  WHERE "users"."type" IN ('Student') AND      "users"."id" = $1 LIMIT 1  [["id", 100]]
PG::UndefinedTable: ERROR:  relation "courses_users" does not exist

我创建了一个名为courses_users的新连接表,只是为了让AR高兴,但是AR正在寻找加入student_id上的表,但我现在正在使用具有user_id的users表。

Student.find(100).courses
  Student Load (1.0ms)  SELECT  "users".* FROM "users"  WHERE "users"."type" IN ('Student') AND  "users"."id" = $1 LIMIT 1  [["id", 100]]
PG::UndefinedColumn: ERROR:  column courses_users.student_id does not exist
LINE 1: ...courses"."id" = "courses_users"."course_id" WHERE "courses_u... 

我做错了吗?我希望教师和学生都作为用户保存,但在模型中有不同的逻辑。

2 个答案:

答案 0 :(得分:1)

您是否尝试过指定类名和关联?在课程课程中,当您给出has_and_belongs_to_many:学生时,请指定连接类名称,或者如下所示的jpin表名称,

所以,在课程课上, has_and_belongs_to_many:学生,:join_table => “courses_students”

OR

has_and_belongs_to_many:students,:class_name => “CoursesStudents”

答案 1 :(得分:1)

您必须指定association_foreign_key

class Student < User
  has_and_belongs_to_many :courses, association_foreign_key: :user_id, 
end