2012-02-28 12 views
53

मैं रेल रेंसैक (https://github.com/ernie/ransack) का उपयोग कर रहा हूं ताकि उपयोगकर्ता कुछ रिकॉर्ड फ़िल्टर और सॉर्ट कर सकें। मुझे परंपरागत तरीकों का उपयोग करके फ़िल्टर किए गए और क्रमबद्ध रिकॉर्ड मिलते हैं।ActiveRecord दायरे से आदेश निकालें

@invoices = Invoice.search(params[:q]).result 

अब मैं तो मैं

@invoices = Invoice.search(params[:q]).result 
@summary = @invoices.select("sum(balance) as balance_total").first 

जब उपयोगकर्ता एक क्षेत्र सुलझाने के लिए निर्दिष्ट करता है सिवाय कुछ सारांश जानकारी प्राप्त करना चाहते हैं। मुझे एसक्यूएल त्रुटि मिलती है:

Column "project_name" is invalid in the ORDER BY clause because 
it is not contained in either an aggregate function or the GROUP BY clause 

क्या मैं इस दायरे से इस तरह को हटा सकता हूं? कैसे?

धन्यवाद

+0

हममम अब लूटना परिणाम सेट पर चुनिंदा पसंद नहीं है, नहीं यकीन है कि यह तरह इस मुद्दे को बिना अब और काम किया। – jrhicks

उत्तर

125

आप कोई रिक्त स्ट्रिंग के साथ reorder विधि कॉल कर सकते हैं। उदा .:

[1] pry(main)> Article.order('headline asc').to_sql 
=> "SELECT `articles`.* FROM `articles` ORDER BY headline asc" 
[2] pry(main)> Article.order('headline asc').reorder('').to_sql 
=> "SELECT `articles`.* FROM `articles` " 
+8

नोट: यदि यह आपके लिए बेहतर महसूस करता है, तो '.order (शून्य)' भी कॉल कर सकता है। – pdobb

+5

एक और विकल्प 'अनकॉप्स (: ऑर्डर)' – Rene

-3

तुम भी रेल 3 में unscoped वर्ग विधि का उपयोग कर सकते हैं:

class Post < ActiveRecord::Base 
    default_scope :published => true 
end 

posts = Post.all #=> SELECT * FROM posts WHERE published = true 

posts = Post.unscoped do 
    Post.all #=> SELECT * FROM posts 
end 

रेल 2 में यह with_exclusive_scope बुलाया गया था।

देखें https://github.com/rails/rails/commit/bd1666ad1de88598ed6f04ceffb8488a77be4385

+23

'unscoped' का उपयोग करने वाले लोगों को चेतावनी का एक शब्द उपयोग करना है: यह ऑर्डर को रीसेट करने से कहीं अधिक है! यदि आप इसे एक जंजीर ActiveRecord क्वेरी में उपयोग कर रहे हैं, तो यह प्रभावी रूप से पूर्व बाधाओं को ध्यान से हटा देगा। उदाहरण के लिए, 'Posts.first.comments.unscoped' पहले टिप्पणी से जुड़े न केवल सभी टिप्पणियों को वापस कर देगा। –