Created
March 17, 2016 04:37
-
-
Save at-longhoang/490f3a246b7807530e40 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Rails cung câp 2 khai báo mối quan hệ nhiều nhiều | |
1. has_and_belongs_to_many | |
2. has_many :through | |
Ví dụ: | |
Student và Course | |
1 sinh viên có thể đăng kí nhiều khóa học | |
và 1 khóa học được đăng kí bởi nhiều sinh viên. | |
Đầu tiên về has_and_belongs_many | |
Trong cả hai model PHẢI khai báo :has_and_belongs_to_many | |
class Student < ActiveRecord::Base | |
has_and_belongs_to_many :courses | |
end | |
class Course < ActiveRecord::Base | |
has_and_belongs_to_many :students | |
end | |
Và ta phải cần thêm 1 bảng join để lưu trữ mối quan hệ 2 bảng. | |
Field là 2 id của các đối tượng mỗi bên. kiểu integer. | |
Có thể chạy bằng câu lệnh sau. | |
rails g migration CreatJoinTable students courses | |
or | |
rails g migration students_courses | |
2. has_many :through | |
Cách này kết hợp gián tiếp 2 bảng thông qua join model. | |
class Student < ActiveRecord::Base | |
has_many :studcours | |
has_many :courses, through: :studcours | |
end | |
class Studcour < ActiveRecord::Base | |
belongs_to :Student | |
belongs_to :Course | |
end | |
classs Course < ActiveRecord::Base | |
has_many :studcours | |
has_many :students, through: :studcours | |
end | |
Nên setup quan hệ through nếu cần làm việc với quan hệ của model như | |
một thực thể độc lập. | |
Nếu không cần làm bất cứ thứ gì với quan hệ của bảng thì setup | |
has_and_belongs_to_many | |
Nên sữ dụng has_many :through nếu cần validation, callback, | |
hoặc bổ sung thuộc tính trên join model. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment