@samuel से इस उत्तर के लिए मैं वास्तव में क्या देख रहा था, लेकिन मैं Taxon1 और Taxon2 और TaxonN के आधार पर फ़िल्टर, जबकि अभी भी खोज के लिए कीवर्ड आपूर्ति करने में सक्षम होना चाहते थे। मुझे कभी भी टैक्सन 1 या टैक्सन 2 खोज करने की आवश्यकता नहीं है, इसलिए मैंने निम्नलिखित अनुकूलन किए हैं। ऐसा करने के लिए एक कम हैकी तरीका हो सकता है, लेकिन यह मेरे लिए बहुत अच्छा काम करता है।
मैं
Spree::Product.class_eval do
add_search_scope :in_all_taxons do |*taxons|
taxons = get_taxons(taxons)
id = arel_table[:id]
joins(:taxons).where(spree_taxons: { id: taxons }).group(id).having(id.count.eq(taxons.size))
end
end
फिर /app/models/spree/base_decorator.rb को
यह जोड़कर नई गुंजाइश इस्तेमाल किया /app/models/spree/product_decorator.rb में एक नया उत्पाद गुंजाइश जोड़ा
Spree::Core::Search::Base.class_eval do
def get_base_scope
base_scope = Spree::Product.active
base_scope = base_scope.in_all_taxons(taxon) unless taxon.blank?
base_scope = get_products_conditions_for(base_scope, keywords)
base_scope = add_search_scopes(base_scope)
base_scope
end
end
अब मैं उत्पादों को पुनः प्राप्त करने (जिसका अर्थ है मैं अभी भी कई taxons साथ खोजशब्द, आदि की आपूर्ति कर सकते साथ) मानक खोज सहायक का उपयोग कर सकते हैं:
# taxon_ids is an array of taxon ids
@searcher = build_searcher(params.merge(:taxon => taxon_ids))
@products = @searcher.retrieve_products
यह मेरे लिए काम करता है और बहुत दर्द रहित महसूस करता है। हालांकि, मैं बेहतर विकल्पों के लिए खुला हूं।
स्रोत
2013-08-08 06:47:28
आपके लिए एक इंटरनेट, महोदय। –
@RyanBigg इस मणि को भी देखें: https://github.com/ernie/squeel। यह एआरएल पर अमूर्तता की एक परत जोड़ता है। यह आपको अधिक संक्षिप्त/पठनीय प्रश्न बनाने की अनुमति देता है। यहां तक कि 'taxons.name.in टैक्सन 'या' taxons.name >> टैक्सन 'नेस्टेड हैंश की तुलना में इतना बेहतर नहीं है, अगर आपको कभी भी जुड़ने के 2 से अधिक स्तर की आवश्यकता होती है तो आप इस श्रृंखला को सराहना करेंगे। और आप ''all_table' को कॉल करते हुए अपने' सामान 'सामान बना सकते हैं, जैसे:' count {count (id) == some_size} '। – jdoe