2012-10-01 13 views
6

के लिए रांसैक सॉर्ट_लिंक का उपयोग करें, मैं अपने रेल प्रोजेक्ट में रेंसैक की सॉर्ट_लिंक का उपयोग कर रहा हूं ताकि मेरे भुगतान मॉडल के लिए फीस की एक सूची प्रदर्शित हो सके। हालांकि, 'fee_amount' भुगतान मॉडल का गुण नहीं है, बल्कि बिल मॉडल (जो भुगतान से संबंधित है) की क्लास विधि है। क्या मैं वर्तमान में है:गैर-गुण

<% = sort_link @search,: bill_fee_amount, "सुविधा शुल्क"%>

जो वर्तमान भुगतान की बिल तक पहुँचता है और फोन करना चाहिए उस बिल पर 'शुल्क_माउंट' विधि, जो कुछ गणना करता है और एक फ्लोट देता है। यह वो फ्लोट्स है जिन्हें मैं खोजना चाहता हूं।

क्या यह किया जा सकता है, या क्या मैं केवल उस मॉडल के गुणों से सॉर्ट कर सकता हूं जिसके साथ मैं काम कर रहा हूं?

उत्तर

0

रांसैक मेटाशर्च के उत्तराधिकारी हैं, और मेटाशर्च दस्तावेज़ के अनुसार, आप कस्टम खोज बना सकते हैं।

https://github.com/ernie/meta_search

मुझे लगता है कि कुछ इस तरह काम करेगा:

scope :sort_by_bill_fee_amount_asc, joins(:bill).select('sum("bills"."fee_amount") AS bill_fee_amount').order('bill_fee_amount ASC') 
scope :sort_by_bill_fee_amount_desc, joins(:bill).select('sum("bills"."fee_amount") AS bill_fee_amount').order('bill_fee_amount DESC') 

सवाल क्या गणना वास्तव में तो मैं मान लिया है कि यह सिर्फ एक की राशि थी के बारे में स्पष्ट नहीं था यहाँ लिंक है क्षेत्र fee_amount कहा जाता है। दुर्भाग्य से, यह शायद उससे भी बदतर है और मुझे लगता है कि खराब SQL गणना को Payment मॉडल में शामिल करने की आवश्यकता होगी।

मुझे लगता है कि मुख्य बिंदु यह है कि एसक्यूएल को उस कॉलम को शामिल करने की आवश्यकता है जिसे आप सॉर्ट कर रहे हैं ताकि आपको एसक्यूएल की गणना करने की आवश्यकता हो और इसे उस नाम से शामिल किया जाए जो रैनसैक खोजना चाहता है।

मुझे उम्मीद है कि इससे मदद मिलती है।

+2

चेक इस [मुद्दा] (https://github.com/ernie/ransack/issues/61)। रंसैक में समान कार्यक्षमता नहीं है जो meta_search। आंतरिक रूप से, यह हमेशा डेटाबेस में परिभाषित मॉडल का उपयोग कर रहा है, और मैं इसे स्कॉप्स द्वारा बनाई गई अस्थायी तालिकाओं का उपयोग नहीं कर सका –

2

आप रंसैक के साथ नहीं आ सकते हैं, लेकिन this issue देखें। ऐसा लगता है कि कुछ लोगों ने इस कार्यक्षमता के लिए पैच बनाए हैं, लेकिन मैंने उन्हें आजमाया नहीं है।

Ransack, आंतरिक रूप से, यह हमेशा डेटाबेस में परिभाषित मॉडल का उपयोग कर रहा है, और मैं इसे स्कॉप्स द्वारा बनाई गई अस्थायी तालिकाओं का उपयोग नहीं कर सका।

पीडी: एक जवाब के रूप टिप्पणी के रूप में मैं हमेशा वापस इस सवाल के लिए आते हैं पर फिर से काम: पी