我有这两个模型:
module Studying
class Student < ApplicationRecord
has_and_belongs_to_many :instructors,
class_name: 'Studying::Instructor',
foreign_key: 'studying_student_id',
association_foreign_key: 'studying_instructor_id'
end
end
module Studying
class Instructor < ApplicationRecord
has_and_belongs_to_many :students,
class_name: 'Studying::Student',
foreign_key: 'studying_instructor_id',
association_foreign_key: 'studying_student_id'
end
end
对于join_table,我已经生成了迁移:
def change
create_table :studying_instructors_students, id: false do |t|
t.belongs_to :studying_instructor, index: { name: 'index_instructors_students_on_studying_instructor_id' }
t.belongs_to :studying_student, index: { name: 'index_instructors_students_on_studying_student_id' }
end
end
所有一切都运转良好,但重点是,我的高级同志告诉我,我不应该在模特中使用诸如:
foreign_key: 'studying_instructor_id',
和
association_foreign_key: 'studying_student_id'
但不是这些我应该使用:
foreign_key: 'instructor_id',
和
association_foreign_key: 'student_id'
并且在第一个模型中以相同的方式,因为这违反了惯例。 我不知道如何在这个模型和表格中做到这一点(你如何理解db中的表名:studying_instructors和studying_students)。
有什么建议吗?
答案 0 :(得分:0)
您可以这样创建关系表
def change
create_table :studying_instructors_students, id: false do |t|
t.integer :instructor_id, index: true
t.integer :student_id, index: true
end
end
然后您可以使用foreign_key: 'instructor_id',
和association_foreign_key: 'student_id'
如果我采取了错误的方式,请随时解决其他问题。
答案 1 :(得分:0)
我会做这样的事情:
class Studying::Student < ApplicationRecord
has_many :student_instructors, class_name: 'Studying::StudentInstructor'
has_many :instructors, through: :student_instructors, class_name: 'Studying::Instructor'
end
class Studying::Instructor < ApplicationRecord
has_many :student_instructors, class_name: 'Studying::StudentInstructor'
has_many :students, through: :student_instructors, class_name: 'Studying::Instructor'
end
class Studying::StudentInstructor < ApplicationRecord
belongs_to :student, class_name: 'Studying::Student'
belongs_to :instructor, class_name: 'Studying::Instructor'
end
我这里有三张桌子。一个是学生,第二个是教师,第三个是联络表(student_instructors)。
studnt_instructor的迁移看起来像这样
def change
create_table :student_instuctors, id: false do |t|
t.integer :instructor_id, index: true
t.integer :student_id, index: true
end
end
我还没有验证语法,但这更多是逻辑解释。
我希望这会有所帮助。