मान लें कि हमारे पास एक फोटोग्राफी साइट है। कोई भी लेखक किसी अन्य लेखक से अपडेट प्राप्त करने के लिए सदस्यता ले सकता है। जाहिर है अगर लेखक एक लेखक बी की सदस्यता दी गई मतलब यह नहीं है कि कि बी ए की सदस्यता दी गई तो हम मॉडलरेल में "दो तरफ" कई से अधिक रिश्तों को कैसे बनाया जाए?
class Author < ActiveRecord::Base
has_many :subscriptions
has_many :subscribed_by_author, :through => :subscriptions, :source => :subscribed_to
end
class Subscription < ActiveRecord::Base
belongs_to :author
belongs_to :subscribed_to, :class_name => "Author", :foreign_key => "subscribed_to"
end
इस तरह का निर्माण हम
- some_author.subscribed_by_author उपयोग कर सकते हैं - सूची लेखकों के लिए जिनके लिए कुछ_अधिकृत सदस्यता ली गई है।
- किसी भी सदस्यता हम दोनों सिरों (कौन किसे की सदस्यता दी गई)
लेकिन सवाल यह है कि कुछ लेखक केवल रेल का उपयोग करने के सदस्यता लेने वाले लोगों की सूची प्राप्त करने के लिए है पता कर सकते हैं के लिए (सादा एसक्यूएल का उपयोग नहीं) यानी प्राप्त इसका उत्तर: "किसने कुछ_अधिकृत की सदस्यता ली है?"
प्रश्न: क्या दोनों पक्षों के रिश्ते को पाने के लिए रेल में कोई क्षमता है यानी some_author.subscribed_BY_author
पर न केवल some_author_subscribed_TO_author
? यदि कोई है, तो यह क्या है?
पीएस subscribed_BY_author: स्पष्ट समाधान, के लिए
- बदलें डेटाबेस डिजाइन है नाम के एक कॉलम शामिल "दिशा"
- 2 बनाएं हर बार एक सदस्यता
लेखक मॉडल
has_many में जोड़े बनाई गई है रिकॉर्ड ,: through =>: सब्सक्रिप्शन, स्रोत =>: subscribed_to,: condition => "direction = 'द्वारा
has_many: subscribed_TO_author,: through =>: सदस्यता, स्रोत =>: subscribed_to,: condit आयनों => "दिशा = 'करने के लिए' '
लेकिन मैं आश्चर्य है कि अगर डेटाबेस डिजाइन बदले बिना एक समाधान है।
दुर्भाग्य से ऐसा नहीं हुआ।लेकिन उसने मुझे सही दिशा दी और निम्नलिखित कोड # लेखक मॉडल has_many: subscription_to,: class_name => "सदस्यता",: विदेशी_की => "subscribed_to" has_many: subscribed_to_author,: through =>: subscriptions_to, स्रोत =>: लेखक इसलिए मैं इस उत्तर को स्वीकार करता हूं, लेकिन आपको पहले इसे सही करने के लिए इसे संपादित करना होगा :) धन्यवाद! –
मेरे एवर को ठीक करना हमेशा मेरी बड़ी खुशी है :) – klew