2013-08-19 8 views
7

मेरे पास मॉडल Board (वंश वंशावली का उपयोग करके लागू) के लिए पदानुक्रमित संरचना है।एक टेबल - दो मॉडल

के बजाय एक मॉडल और कुछ स्कोप, मैं दो मॉडल करना चाहते हैं: Board रूट स्तर तत्वों (ancestry स्तंभ मान nil है) के लिए, और बाकी (ancestry स्तंभ मान not nil है) के लिए Category। वे एक ही टेबल boards का उपयोग करेंगे।

मैं ऐसा कुछ कैसे कर सकता हूं?

उत्तर

10

आप अपने रेल संस्करण के आधार पर set_table_name या self.table_name का उपयोग कर मॉडल के लिए तालिका को परिभाषित कर सकते हैं। इसके अलावा, आप, इस मॉडल के लिए बने प्रत्येक क्वेरी के लिए एक डिफ़ॉल्ट दायरे को परिभाषित default_scope का उपयोग कर सकते हैं, तो दोनों का एक संयोजन होना चाहिए आप क्या खोज रहे हैं:

class Category < AR:Base 
    self.table_name = 'boards' 
    default_scope where('boards.ancestry IS NOT NULL') 
end 
3

आप श्रेणी मॉडल की तालिका नाम निर्दिष्ट और उत्पन्न कर सकता है एक डिफ़ॉल्ट दायरा:

class Category < ActiveRecord::Base 
    self.table_name = "boards" 
    default_scope where('boards.ancestry IS NOT NULL') 
end 

और आप दोनों मॉडलों के साथ बोर्ड-टेबल बुद्धिमानी से बातचीत करने में सक्षम होना चाहिए।

या आप एक मॉडल के साथ रहते हैं और विशिष्ट सामग्री के लिए दो मॉड्यूल जोड़ते हैं। यह आपकी वरीयताओं पर निर्भर करता है।

+1

वाह, बिल्कुल वही जवाब, हाहाहा, यह मजाकिया था। – MurifoX

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