2011-03-05 15 views
8

तो मुझे रेल 3 के लिए स्वत: पूर्ण पर कुछ अच्छी जानकारी मिली, यह वास्तव में उपयोग करना आसान लग रहा है। लेकिन मेरे पास एक ऐसा केस है जो फिट नहीं है और मुझे कुछ सलाह चाहिए।रेल 3 एकाधिक मॉडलों में स्वत: पूर्ण

मैं उपयोगकर्ता को एक सरल रूप से चालान में उत्पाद और सेवाएं जोड़ने की क्षमता देना चाहता हूं। मैं चाहता हूं कि वे आइटम फ़ील्ड में टाइप करने में सक्षम हों और इसे एक ही सेट के रूप में product.name और Service.name दोनों से स्वतः पूर्ण करें।

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

कोई सलाह है कि मैं इसे कैसे पूरा करने की कोशिश कर सकता हूं? यहां तक ​​कि सरल खोज उदाहरणों के साथ भी वे एक मॉडल तक ही सीमित हैं।

उत्तर

4

आप मिश्रण में Redis शुरू करने के लिए विरोध नहीं कर रहे हैं, https://github.com/seatgeek/soulmate पर एक नजर है - README से:

सोलमेट मदद करने के लिए एक तेजी से स्वत: पूर्ण सुविधा विकसित करने की आम समस्या का समाधान एक उपकरण है। यह आंशिक रूप से पूर्ण किए गए शब्दों और संबंधित शीर्ष मिलान करने वाली वस्तुओं की अनुक्रमणिका बनाने के लिए रेडिस के सॉर्ट किए गए सेट का उपयोग करता है, और उन्हें पूछने के लिए एक सरल sinatra ऐप प्रदान करता है। सोलमेट आपके वाक्यों को खत्म करता है। निम्नलिखित

सोलमेट सरल और तेजी से होने के लिए बनाया गया था, और प्रदान करता है:

  • (SeatGeek में हम कलाकारों, घटनाओं के लिए स्वतः पूर्ण कर रहे हैं, और स्थानों) किसी एक क्वेरी में मदों की कई प्रकार के लिए सुझाव प्रदान करें
  • परिणाम द्वारा आदेश दिया जाता है एक उपयोगकर्ता द्वारा निर्दिष्ट प्रत्येक आइटम के लिए स्कोर
  • मनमानी मेटाडाटा

एक आइटम मैं (SeatGeek पर हम दोनों एक यूआरएल और एक उपशीर्षक भंडारण कर रहे हैं) सा सरल JSON ऑब्जेक्ट कि लगता है कि:

{ 
    "id": 3, 
    "term": "Citi Field", 
    "score": 81, 
    "data": { 
    "url": "/citi-field-tickets/", 
    "subtitle": "Flushing, NY" 
    } 
} 

कहाँ id एक अद्वितीय पहचानकर्ता (विशेष प्रकार के भीतर) है, term वाक्यांश आप को पूर्ण करने का भी प्रदान कर रहा है, score एक उपयोगकर्ता द्वारा निर्दिष्ट रैंकिंग मीट्रिक (redis है होगा एक ही स्कोर वाले आइटमों के लिए चीजें लेक्सिकोोग्राफ़िक रूप से ऑर्डर करें), और data मेटाडेटा के लिए एक वैकल्पिक कंटेनर है जिसे आप इस आइटम से मेल खाते हैं जब आप वापस लौटना चाहते हैं (सीटजीक में हम आइटम के लिए यूआरएल और साथ ही उपशीर्षक भी शामिल करते हैं इसे एक स्वत: पूर्ण ड्रॉपडाउन में प्रस्तुत करें)।

SeatGeek पर कार्रवाई में सोलमेट देखें।

यदि कुछ और नहीं है, तो शायद यह आपको कुछ तरीकों से बताएगा कि डेटा को कैसे समझ में आता है।

मैंने नहीं लिखा या आत्मा साथी के साथ कुछ भी नहीं किया है। यह एक ऐसी लाइब्रेरी है जिसे मैंने इसी तरह की समस्या को हल करने का प्रयास करते समय खोजा था। आशा करता हूँ की ये काम करेगा!

1

यदि क्लाइंट-साइड स्वतः पूर्ण विकल्प है (उदा।आप कुछ उत्पादों और सेवाओं हैं) तो आप JQuery स्वत: पूर्ण के साथ जा सकते हैं:

नियंत्रक:

@keys = @categories.map { |x| x.name } + @entries.map { |x| x.description } 
@autocomplete_categories = @keys.to_json.html_safe 

दृश्य:

<script type="text/javascript"> 
$(document).ready(function() { 
    var data = <%= @autocomplete_categories %>; 
    $("#auto").autocomplete({ source: data }); 
}); 
</script> 

<input type="text" name="auto" id="auto" /> 
संबंधित मुद्दे