我有一个用户表和一个课程表。在用户模型之上,我使用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...
我做错了吗?我希望教师和学生都作为用户保存,但在模型中有不同的逻辑。
答案 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