2016-09-05 6 views
9

में खेतों की मनमानी संख्या को परिभाषित करने की अनुमति कैसे दें मैं एक सीएमएस बना रहा हूं जहां प्रशासक विभिन्न प्रकारों (टेक्स्ट, चेकबॉक्स, आदि) के मनमाना संख्या फ़ील्ड को परिभाषित करने में सक्षम होना चाहिए। उपयोगकर्ता तब उन फ़ील्ड भर सकते हैं और पोस्ट जेनरेट कर सकते हैं।उपयोगकर्ताओं को रेल

रेल में यह कैसे किया जा सकता है? मुझे लगता है कि इन "आभासी" विशेषताओं का दृढ़ता डेटाबेस में क्रमबद्ध विशेषता में किया जाएगा। लेकिन मुझे यकीन नहीं है कि विचारों और नियंत्रकों को कैसे व्यवस्थित किया जाए, या जहां फ़ील्ड को परिभाषित किया जाना चाहिए।

उत्तर

4

जो आप वर्णन करते हैं उसे Entity-Attribute-Value model कहा जाता है। MattW। 2 संभव समाधान प्रदान की है, लेकिन आप भी इन जवाहरात कि बजाय अपने आप को इस से निपटने में इस डेटा पैटर्न को लागू से एक का उपयोग कर सकते हैं:

मैं इनमें से कोई इस्तेमाल नहीं किया है पहले रत्न, इसलिए मैं सुझाव नहीं दे सकता कि कौन सा सबसे अच्छा है।

रिफाइनरीसीएमएस में आपकी आवश्यकता के लिए this extension है। आप विचारों के लिए एक नज़र रखना चाहते हैं।

एक समान older question here on Stackoverflow भी है।

3

जैसे ही उपयोगकर्ता परिभाषित होता है, यह कभी भी कॉलम (फ़ील्ड) नहीं होता है, यह डेटाबेस में हमेशा एक पंक्ति (इकाई) होता है - उपयोगकर्ता आपकी डेटा संरचना को परिभाषित नहीं करते हैं।

यहां दो विचार हैं। (1) अधिक मूर्खतापूर्ण "रेल मार्ग" है। (2) कुछ हद तक कम जटिल है, लेकिन आपको अपने विशिष्ट डीबीएमएस से जोड़ सकता है।

(1) चार मॉडल का उपयोग करना: Posts (एन: 1) PostTypes (1: एन) PostFields (1: एन) PostValues (एन: 1 Posts):

create_table :post_types do |t| 
    t.string :name 
    t.text :description 
    .... 

end 

create_table :post_fields do |t| 
    t.references :post_type 
    t.string :name 
    t.integer :type 
    t.boolean :required 
    .... 
end 

create_table :posts do |t| 
    t.references :post_type 
    (... common fields for all posts, like user or timestamp) 

end 
create_table :post_values do |t| 
    t.references :post 
    t.references :post_field 
    t.string :value 
    .... 
end 

केवल समस्या यह है कि आप ' , boolean_post_values: डेटाबेस में मूल्यों के लिए एक ही प्रकार के लिए सीमित कर रहे हैं, आप एक बहुरूपी संघ कर सकता है और के लिए अलग अलग मॉडल बनाने float_post_values ​​आदि

  1. एक अन्य समाधान के लिए हो सकता है एक जेसन-आधारित डेटा संरचना का उपयोग करें, i। ई। एक ही जैसा कि ऊपर है, लेकिन PostValues के बजाय सिर्फ Posts में से एक क्षेत्र में सहेजने के लिए:

    create_table :posts do |t| t.references :post_type t.json :data ... end // ... no table :post_values

यह शायद आसान है, लेकिन json एक postgres विशेष डेटाप्रकार है (हालांकि आप स्ट्रिंग इस्तेमाल कर सकते हैं और खुद को डी/एन्कोडिंग करें)।

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