Làm thế nào về mô hình dữ liệu sau đây:
class User < ActiveRecord::Base
has_many :links
has_many :favorites, :dependent => :destroy
has_many :favorite_links, :through => :favorites, :source => :link
end
class Link < ActiveRecord::Base
belongs_to :user
has_many :favorites, :dependent => :destroy
has_many :favorited, :through => :favorites, :source => :user
end
class Favorite < ActiveRecord::Base
belongs_to :user
belongs_to :link
end
Kể từ User
đã có một hiệp hội gọi là links
, và Link
đã có một gọi users
, chúng ta không thể sử dụng tên tương tự cho các hiệp hội has_many :through
(ví dụ User has_many :links, :through => :favorites
sẽ không hoạt động). Vì vậy, chúng tôi phát minh ra một tên liên kết mới và giúp Rails biết liên kết nào cần tải từ hiệp hội trung gian thông qua thuộc tính source
.
Dưới đây là một số giả để sử dụng liên kết này:
# Some users
user1 = User.create :name => "User1"
user2 = User.create :name => "User2"
# They create some links
link1_1 = user1.links.create :url => "http://link1_1"
link1_2 = user1.links.create :url => "http://link1_2"
link2_1 = user2.links.create :url => "http://link2_1"
link2_2 = user2.links.create :url => "http://link2_2"
# User1 favorites User2's first link
user1.favorites.create :link => link2_1
# User2 favorites both of User1's links
user2.favorites.create :link => link1_1
user2.favorites.create :link => link1_2
user1.links => [link1_1, link1_2]
user1.favorite_links => [link2_1]
user2.links => [link2_1, link2_2]
user2.favorite_links => [link1_1, link1_2]
link1_1.favorited => [user2]
link2_1.destroy
user1.favorite_links => []
user2.links => [link2_2]
Nguồn
2011-11-23 02:52:54
Liệu tôi có cần phải tạo ra 'Favorite_Link' và' mô hình Favorited'? – Dru
Không; 'has_many: through' kết hợp với các tùy chọn' class_name' chỉ ra rằng Rails nên nhìn vào liên kết đã cho một liên kết khác trong đó, về cơ bản nhảy qua hai mô hình để có được các đối tượng thích hợp. –
DISREGARD [Đã giải thích ở trên]: Cảm ơn, tôi đang gặp khó khăn khi hiểu cách chúng tôi có thể tham khảo: yêu thích và: favorites_links trong các mô hình mà không có những mô hình hiện có như chính mô hình. Có tên cho kỹ thuật này không? Tôi muốn đọc nó để hiểu nó hoạt động như thế nào. – Dru