Skip to content

Instantly share code, notes, and snippets.

@at-longhoang
Created March 17, 2016 04:37
Show Gist options
  • Save at-longhoang/490f3a246b7807530e40 to your computer and use it in GitHub Desktop.
Save at-longhoang/490f3a246b7807530e40 to your computer and use it in GitHub Desktop.
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