2011-01-18 20 views
5

मेरे पास एक इकाई मॉडल है और मैं संस्थाओं के बीच कनेक्शन प्रदर्शित करना चाहता हूं। यानी, इकाई 1 एंटिटी 2 से जुड़ा हुआ है।रेल में स्वयं संदर्भ मॉडल 3

मेरी सोच, अभी, दो कॉल किए गए कनेक्शन के बीच एक मॉडल मॉडल बनाना है और इसे पारंपरिक रेल में शामिल होने वाली तालिका की तरह काम करना है। कॉलम entity_one_id और entity_two_id होने के अलावा, एंटीटी और कनेक्शन के बीच कई से अधिक संबंध स्थापित करें।

ऐसा करने के लिए यह वास्तव में एक शानदार तरीका नहीं है। मैं सोच रहा था कि क्या किसी के पास कोई बेहतर विचार है? हो सकता है कि कुछ और रेल-एस्क्यू जो मैं अभी नहीं देख रहा हूं?

उत्तर

8

यह करने का सबसे आम तरीका है। यदि एक इकाई केवल एक अन्य मॉडल से जुड़ा हुआ है, तो आप एक लिंक्ड-लिस्ट, पेड़ जैसी संरचना का उपयोग कर सकते हैं।

Ryan Bates' Railscast on self-joining models देखें। यह एक सामाजिक नेटवर्क की तरह सिस्टम के साथ सौदों, लेकिन यह अभी भी सिद्धांतों की आवश्यकता होगी है और एक महान शुरुआती बिंदु

1

आप इस कार्यान्वयन इस्तेमाल कर सकते हैं प्रदान करता है:

class User < ActiveRecord::Base 
    has_many :friends, :through => :friendships, :conditions => "status = 'accepted'" 
    has_many :requested_friends, :through => :friendships, :source => :friend, :conditions => "status = 'requested'", :order => :created_at 
    has_many :pending_friends, :through => :friendships, :source => :friend, :conditions => "status = 'pending'", :order => :created_at 
    has_many :friendships, :dependent => :destroy 
end 


class Friendship < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend, :class_name => "User" 
end 
+3

कार्यान्वयन आप रयान के Railscast से चुरा लिया? :) – sethvargo

+3

वास्तव में मुझे याद नहीं आया कि मैंने इसे कहाँ उठाया, लेकिन आप निश्चित रूप से सही हैं :) – apneadiving

संबंधित मुद्दे