我需要为这些关联添加什么引用,foreign_keys?

时间:2015-11-29 01:04:10

标签: ruby-on-rails ruby-on-rails-4

我在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的其他表格(型号)吗?

1 个答案:

答案 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_idcourse_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_idcourse_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

更多阅读: