2011-10-06 12 views
5

नामित स्कोप और स्फिंक्स स्कॉप्स को मिश्रित करने का कोई तरीका है? मुझे विश्वास नहीं है कि वहां नहीं है।क्या स्कॉप्स नामक रेलों को मिश्रण करने और स्फिंक्स स्कॉप्स सोचने का कोई तरीका है?

मेरे पास पाठों पर स्फिंक्स इंडेक्स है। एक बार उपयोगकर्ता सबक खरीदते हैं, उनके पास एक स्क्रीन होती है कि वे अपने सभी पाठों की एक सूची देख सकते हैं। मैं चाहता हूं कि वे साइट-व्यापी पाठों पर समान खोजों को निष्पादित करें, लेकिन उनके स्वामित्व वाले लोगों के लिए स्कॉप्ड करें।

यह स्पष्ट रूप से स्फिंक्स-केवल स्कॉप्स के साथ संभव नहीं है, क्योंकि मैं क्रय डेटा को अनुक्रमणित नहीं कर रहा हूं, और न ही मुझे लगता है कि मुझे करना चाहिए।

क्या इसे पूरा करने का कोई तरीका है?

यह दो प्रणालियों को "गठबंधन" करने के लिए अब तक है। यह मेरे लिए hackish लगता है, लेकिन यह काम करता है:

lesson_ids = current_user.active_products_by_type(:lessons).collect{|x| x.id} 
@lessons = Lesson.active_scope.search :with => {:id => lesson_ids } 

उत्तर

3

यह थोड़ा मुश्किल बताने के लिए कि क्या आपके काम के आसपास उचित है, यह देखते हुए मुझे यकीन है कि क्या स्कोप active_products_by_type और active_scope हैं (जो स्फिंक्स एक है नहीं कर रहा हूँ है? न तो दोनों?)।

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

सभी ने कहा कि शायद कोड में कुछ भी नहीं है जो आपको एक एआर स्कोप पर एक खोज कॉल श्रृंखला देगा - और आपको शायद परिणाम भी मिलेंगे - लेकिन ऐसा इसलिए है क्योंकि दायरा Model.find कॉल को प्रभावित करता है जो सोचते हैं स्फिंक्स बनाता है मॉडल परिणामों में खोज परिणामों को रूपांतरित करने के लिए। उपरोक्त बात यह है कि जब आप वस्तुओं को देख सकते हैं, तो एआर स्कोप केवल खोज परिणामों के दिए गए पृष्ठ पर लागू किया जा रहा है, और पेजिनेशन गणित (पृष्ठों/कुल परिणामों की संख्या) अविश्वसनीय होगी।

Urgh, एक निबंध का एक सा में बदल गया है, लेकिन उम्मीद है कि यह मदद करता है ...

+0

active_products_by_type का दायरा नाम दिया गया है, और सक्रिय_स्कोप टीएस स्कोप – pixelearth

+0

ठीक है, तो आपका काम-आसपास शायद सबसे अच्छा तरीका है। – pat

2

मुझे लगता है कि यह एआर स्कोप के साथ समाप्त करने के लिए बेहतर है .includes, .joins आदि करने में सक्षम हो रहे हैं:

sphinx_scope(:visible) do 
    { with: {is_visible: true} } 
end 

@items = Item.where(
    id: Item.visible.search_for_ids(nil, 
    page: params[:page], 
    with: { 
     tag_id: @tag.id, 
     category_id: current_category.id 
    } 
) 
).order(:id).includes(:photos) 
संबंधित मुद्दे