कैसे निम्न डेटा मॉडल के बारे में:
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
User
के बाद से पहले से ही एक संघ links
कहा जाता है, और Link
पहले से ही एक users
कहा जाता है, हम has_many :through
संघ के लिए एक ही नाम का उपयोग नहीं कर सकते हैं (उदाहरण के लिए User has_many :links, :through => :favorites
काम नहीं करेगा)। इसलिए, हमने एक नया एसोसिएशन नाम आविष्कार किया है, और रेल को यह जानने में मदद करता है कि source
विशेषता के माध्यम से मध्यस्थ संगठन से कौन सा सहयोग लोड करना है।
# 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]
स्रोत
2011-11-23 02:52:54
मैं 'Favorite_Link' और' Favorited' मॉडल बनाने के लिए की जरूरत है चाहेंगे:
यहाँ इस संघ को उपयोग करने के स्यूडोकोड है? – Dru
नहीं; 'has_many:' class_name' विकल्पों के साथ संयुक्त 'इंगित करता है कि रेल को वहां किसी अन्य संगठन के लिए दिए गए एसोसिएशन में देखना चाहिए, अनिवार्य रूप से सही वस्तुओं को प्राप्त करने के लिए दो मॉडल के माध्यम से कूदना चाहिए। –
डिस्ग्रर्ड [ऊपर समझाया गया]: धन्यवाद, मुझे यह समझने में परेशानी हो रही है कि हम कैसे संदर्भ दे सकते हैं: पसंदीदा और मॉडल में पसंदीदा_लिंक्स मॉडल के रूप में मौजूद हैं। क्या इस तकनीक के लिए कोई नाम है? मैं यह समझने के लिए पढ़ना चाहता हूं कि यह कैसे काम करता है। – Dru