आपकी तात्कालिक समस्या यह है कि आप PostgreSQL के लिए अमान्य SQL बना रहे हैं:
SELECT category FROM "microposts" GROUP BY category ORDER BY microposts.created_at DESC
आपका ORDER BY आपकी शेष क्वेरी से मेल नहीं खाता। आप किसी समूहित क्वेरी में किसी स्तंभ का उपयोग तब तक नहीं कर सकते जब तक कि वह स्तंभ भी समूहीकृत न हो या यदि स्तंभ एक समग्र फ़ंक्शन में दिखाई देता है, तो त्रुटि संदेश का यही अर्थ है। इसका कारण यह है कि PostgreSQL को पता नहीं चलेगा कि किस पंक्ति का created_at
. है उपयोग करने के लिए जब पंक्तियों के समूह को ग्रुप बाय क्लॉज द्वारा जोड़ा जाता है; कुछ डेटाबेस चुपचाप अपने आप ही एक पंक्ति चुन लेंगे, PostgreSQL सख्त होना पसंद करता है और चाहता है कि आप स्वयं अस्पष्टता को दूर करें।
आदेश को स्वयं निर्दिष्ट करने का प्रयास करें:
@categories = Micropost.select("category").group("category").order("category")
एक अन्य विकल्प DISTINCT का उपयोग करना है डुप्लीकेट से बचने के लिए GROUP BY के बजाय:
@categories = Micropost.select('DISTINCT(category)')
बीटीडब्ल्यू, आपको वास्तव में उस तरह की चीज को एक दृश्य में नहीं करना चाहिए, हो सकता है कि आप इसे अपने नियंत्रक में ले जाना चाहें।
आपकी असली समस्या यह है कि आप एक डेटाबेस के शीर्ष पर विकसित हो रहे हैं जबकि दूसरे पर तैनाती कर रहे हैं। मैं अनुशंसा करता हूं कि आप अपने विकास के माहौल को PostgreSQL 8.3 (यदि आप एक हेरोकू साझा डेटाबेस पर तैनात कर रहे हैं) या PostgreSQL 9.0 (यदि आप एक समर्पित डेटाबेस पर तैनात कर रहे हैं) पर स्विच करें।