代码之家  ›  专栏  ›  技术社区  ›  Khadijah Celestine

活动记录单表继承联接表

  •  0
  • Khadijah Celestine  · 技术社区  · 11 年前

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

    老师有很多课程,但学生有很多课程。

    一门课程属于老师,有很多学生。

    我试图访问一个学生的课程,但AR正在寻找一个名为courses_user的加入表,而我的则称为course_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... 
    

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

    2 回复  |  直到 11 年前
        1
  •  1
  •   Bhavya    11 年前

    您是否尝试将类名与关联一起指定?。在课程类中,当你给has_and_belongs_to_many:学生时,指定联接类名或jpin表名,如下所示:,

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

    has_and_belongs_to_many:学生,:类名=>“课程学生”

        2
  •  1
  •   infused    11 年前

    必须指定 association_foreign_key :

    class Student < User
      has_and_belongs_to_many :courses, association_foreign_key: :user_id, 
    end
    
    推荐文章