我在Rails 4.2应用程序中有这些关联。我不明白如何在教师和课程之间设置正确的引用/ foreign_keys。
到目前为止,教师和课程表都有一个local_id(本地参考)。 本地是他们都属于的培训中心。
class Local < ActiveRecord::Base
has_many :instructors
has_many :courses
end
class Instructor < ActiveRecord::Base
belongs_to :local
has_many :courses, through: :locals
end
class Course < ActiveRecord::Base
belongs_to :local
has_many :instructors, through: :locals
end
我是否在课程表中添加了foreign_key?像这样:
add_foreign_key :courses, :instructors
我读到了一些关于什么时候我们需要一个&#34;加入表&#34;因为我们需要存储许多ID。我猜本地就是这种情况。
或者我需要belongs_to :instructor, :course
的其他表格(型号)吗?
答案 0 :(得分:0)
以下是我如何设置以获得最大灵活性。
让我们设置一个多对多的关系,我们称之为Employment
。
我们可以用:
生成模型rails g model employment instructor:belongs_to course:belongs_to
哪会给我们这个:
class Employment < ActiveRecord::Base
belongs_to :instructor
belongs_to :course
end
employments
将拥有instructor_id
和course_id
个外键。这允许我们为课程分配任意数量的教师,反之亦然。
所以让我们使用连接模型:
class Instructor < ActiveRecord::Base
has_many :employments
has_many :courses, through: :employments
end
class Course < ActiveRecord::Base
has_many :employments
has_many :instructors, through: :employments
end
我建议您重命名Local
模型Venue
,因为它是举办课程或活动的地方的通用英语术语。 Locale
因为与a separate concept in web applications发生碰撞而导致名称冲突,因此很尴尬。
我们应该尽可能多地设置它来解释现实生活的复杂性。
再次:
rails g model booking venue:belongs_to course:belongs_to
class Booking < ActiveRecord::Base
belongs_to :venue
belongs_to :course
end
bookings
将拥有venue_id
和course_id
个外键。
class Venue < ActiveRecord::Base # was Local
has_many :bookings
has_many :courses, through: :bookings
end
class Course < ActiveRecord::Base
# ...
has_many :bookings
has_many :venues, through: :bookings
end