ruby-on-rails – 如何在我的灯具中加载HABTM与外键关系?

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

在此连接表中,引用User表的外键不是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",:foreign_key => "school_id"
end

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

fixtures / users.yml:

user1:
  name: Student
  studying_schools: school1

fixtures / schools.yml:

school1:
  name: School 1
  active: true
  students: user1

加载上面的灯具会返回ActiveRecord异常:
ActiveRecord :: StatementInvalid:MysqL :: Error:’字段列表’中的未知列’user_id’:INSERT INTO schools_students(student_id,user_id)VALUES(6562055,14302562)

我究竟做错了什么 ?

解决方法

我刚刚发现它:我在habtm定义中缺少association_foreign_key.

正确的定义方法是:

class School < ActiveRecord::Base
 has_and_belongs_to_many :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,:foreign_key => "student_id"
 # :association_foreign_key is the default school_id
end

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...