2014-06-18 8 views
5

0Sके साथ एक विशेषता की तुलना में किसी अन्य विशेषता की तुलना करना Ransack मुझे एक विशेषता, एक अनुमान और मूल्य के साथ शर्तों का निर्माण करने की अनुमति देता है। हालांकि, किसी अन्य विशेषता को तुलना करने के तरीके के बारे में कोई दस्तावेज नहीं मिला है। उदाहरण के लिए, मैं कैसे एक शर्त के लिए बना सकते हैं:रंसैक

WHERE column_a < column_b 
+0

तो आप दोनों कॉलम_ए और कॉलम_बी विशेषताओं को चाहते हैं। 'Person.search ({id_eq: 1}, {name_object:: abcd} की तरह नहीं)। परिणाम.to_sql' – Sontya

उत्तर

2

मैं काफी कुछ समय के लिए लूटना उपयोग कर रहे हैं, लेकिन मैं किसी भी संभावना के लिए आप क्या देख रहे हैं करने के लिए नहीं दिख रहा। आप जो चाहते हैं वह एक "केस -> जब" कथन है, जिसे रेल में या ActiveRecord के साथ SQL में उत्पादित किया जा सकता है।

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

क्या आप की तरह एक गुंजाइश पैदा कर सकता है:

scope :column_b_gt_columnb_a, -> { where('column_b > column_a') } 

और फिर आप इस तरह अपनी खोज का निर्माण कर सकते हैं:

Object({ column_b_gt_columnb_a: true }) 

शायद नहीं वास्तव में आप क्या देख रहे थे, लेकिन मुझे लगता है यह सबसे अच्छा है कि आप प्राप्त करेंगे ...

और यदि आप रेल के साथ ऐसा करना चाहते हैं तो आप मूल्यों की तुलना करने के लिए करेंगे या कहेंगे कि मैंने कहां ऊपर दिया गया कथन।

Records.each do |i| 
case i.variable_a 
    when i.variable_b 
    # do something when it's the same 
    when i.variable_a > i.variable_b 
    # do something when it's greater 
    end 
end 

एक SQL बयान के एक उदाहरण के लिए यहाँ देखो

How do I compare two columns for equality in SQL Server?

आशा है कि यह एक बिट में मदद करता है!