如何在我的灯具中加载HABTM与外键关系?

Jul*_*ien 7 ruby-on-rails foreign-keys fixtures has-and-belongs-to-many

我有以下两个模型:School和User,以及它们之间的HABTM关系,带有连接表.

在这个连接表的外键指的用户表中不叫user_id,但student_id.

class School < ActiveRecord::Base
 has_and_belongs_to_many :students, :class_name => "User", :join_table => "schools_students", :foreign_key => "student_id"
end

class User < ActiveRecord::Base
 has_and_belongs_to_many :studying_schools, :class_name => "School", :join_table => "schools_students", :foreign_key => "school_id"
end
Run Code Online (Sandbox Code Playgroud)

我想在我的用户和学校设备中创建一个学校和一个用户,但在User中定义的foreign_key似乎是个问题.

fixtures/users.yml :

user1:
  name: Student
  studying_schools: school1
Run Code Online (Sandbox Code Playgroud)

fixtures/schools.yml :

school1:
  name: School 1
  active: true
  students: user1
Run Code Online (Sandbox Code Playgroud)

加载上面的灯具会返回ActiveRecord异常: ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'user_id' in 'field list': INSERT INTO schools_students (student_id, user_id) VALUES (6562055, 14302562)

我究竟做错了什么 ?

Jul*_*ien 21

我刚刚发现它:我错过association_foreign_key了habtm的定义.

定义它的正确方法是:

class School < ActiveRecord::Base
 has_and_belongs_to_many :students, :class_name => "User", :join_table => "schools_students", :association_foreign_key => "student_id"
 # :foreign_key is the default school_id
end

class User < ActiveRecord::Base
 has_and_belongs_to_many :studying_schools, :class_name => "School", :join_table => "schools_students", :foreign_key => "student_id"
 # :association_foreign_key is the default school_id
end
Run Code Online (Sandbox Code Playgroud)