के साथ meta_search का संयोजन करना मैंने एक रेल 3 वेबसाइट के लिए कुछ खोज-कार्यक्षमता के साथ एक छोटी सी समस्या में भाग लिया है।act_as_taggable_on
class Post < ActiveRecord::Base
acts_as_taggable
end
मैं acts_as_taggable_on
उपयोग कर रहा हूँ थोड़ा आसान मेरी पोस्ट करने के लिए टैग जोड़ने बनाने के लिए: मैं एक साधारण Post
मॉडल है कि इस तरह दिखता है। मैं एक पोस्ट में चिह्नित 'रेल' है और मैं निम्नलिखित करते हैं, सब कुछ ठीक काम करता है:
@posts = Post.tagged_with("rails")
बात है, मैं भी पोस्ट के शीर्षक के लिए खोज करना चाहते हैं। जब मेरे पास 'हैलो वर्ल्ड' और टैग की गई 'रेल' शीर्षक वाली एक पोस्ट है, तो मैं 'हैलो' या 'रेल' की खोज करके इस पोस्ट को ढूंढने में सक्षम होना चाहता हूं। तो मैं tagged_with
विधि acts_as_taggable_on
के साथ संयोजन में शीर्षक कॉलम के लिए LIKE
कथन चाहता हूं। where
गुंजाइश काम नहीं करती है, क्योंकि यह OR
के बजाय AND
का उपयोग करती है।
मुझे आशा है कि meta_search
समस्या को ठीक करेगा, लेकिन यह मेरे लिए काम नहीं कर रहा है। मैंने कई चीजों की कोशिश की। मैंने जो कोशिश की है उसके दो उदाहरण यहां दिए गए हैं:
@search = Post.search(:tagged_with_or_title_like => params[:search])
@search = Post.search(:title_like => params[:search], :tagged_with => params[:search])
यह सिर्फ 'टैग_with' को नहीं पहचानता है। यह मेरी पहली बार meta_search
का उपयोग कर रहा है, इसलिए मैं यहां कुछ गलत कर रहा हूं। ;) मैंने कहीं पढ़ा है कि searchlogic
acts_as_taggable_on
के साथ संयोजन में काम किया, लेकिन चूंकि यह रेल 3 का समर्थन नहीं करता है, इसलिए मैं इसका उपयोग नहीं कर सकता।
मुझे आशा है कि यहां कोई व्यक्ति इस समस्या से मेरी सहायता कर सकता है। के साथ acts_as_taggable_on
को गठबंधन करने के लिए कोई भी जानता है? या शायद meta_search
के बिना समाधान पता है? इसके अलावा, अगर acts_as_taggable_on
के लिए एक बेहतर विकल्प है जो meta_search
के साथ काम करता है तो मुझे यह भी सुनना अच्छा लगेगा। :)
संपादित करें: मैं tagged_with
या meta_search
का उपयोग किए बिना काम कर समझ में आ गया। यह इस तरह से देखा:
Post.select("DISTINCT posts.*").joins(:base_tags).where("posts.title LIKE ? OR tags.name = ?", "%"+params[:search]+"%", params[:search])
क्वेरी बनाया हास्यास्पद था, तो मैं एक अलग मार्ग की कोशिश की: acts_as_taggable_on
और meta_search
बिना। मैंने स्वयं एक टैग टेबल बनाया और has_and_belongs_to_many
के साथ पोस्ट में इसे जोड़ा। मेरे पास अन्य टेबल नहीं होंगे जिन्हें टैग से कनेक्ट करने की आवश्यकता है, इसलिए यह मेरे लिए चाल करेगा। मैं दोनों टैग और शीर्षक खोज के लिए एक गुंजाइश बनाया:
scope :search, lambda { |search| select("DISTINCT posts.*").joins(:tags).where("posts.title LIKE ? OR tags.name = ?", "%"+search+"%", search) }
अब मैं निम्न कर सकते हैं:
Post.search(params[:search])
यह बहुत अच्छा काम करता है और क्वेरी भी काफी अच्छा है। फिर भी, अगर कोई बेहतर तरीका जानता है: कृपया मुझे बताएं। Google के माध्यम से आने वाले लोगों के लिए यह सहायक भी हो सकता है।
इस समस्या पर कोई खबर का आनंद? – CharlieMezak
मैंने इस प्रश्न को अद्यतन किया कि मैंने इसे कैसे हल किया। मैं अंततः act_as_taggable और meta_search गिरा दिया। शायद आप सर्ज के जवाब का प्रयास कर सकते हैं। अगर यह काम करता है तो मैं इसे उत्तर के रूप में चिह्नित करूंगा। :) – RobinBrouwer