[英]How do I set foreign_keys on a has_many: :through association in Rails?
[英]What references, foreign_keys do I need to add for these associations?
我的Rails 4.2應用程序中有這些關聯。 我不明白如何在教師和課程之間設置適當的參考/ foreign_key。
到目前為止,講師和課程表都具有local_id(本地參考)。 Local是他們倆都屬於的培訓中心。
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
我讀到一些有關在有許多對許多關聯時需要“聯接表”的信息,因為我們需要存儲許多ID。 我想本地就是這種情況。
還是我需要另一個表belongs_to :instructor, :course
( belongs_to :instructor, :course
表(模型)?
這是我將其設置為最大靈活性的方式。
讓我們用我們稱為“ 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
和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
很尷尬,因為它與Web應用程序中的一個單獨概念沖突,並可能導致名稱沖突。
而且我們可能應該將其設置為多對多,以說明現實生活中的復雜性。
再說一遍:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.