Masalah langsung Anda adalah Anda menghasilkan SQL yang tidak valid untuk PostgreSQL:
SELECT category FROM "microposts" GROUP BY category ORDER BY microposts.created_at DESC
ORDER BY Anda tidak cocok dengan sisa kueri Anda. Anda tidak dapat menggunakan kolom dalam kueri yang dikelompokkan kecuali jika kolom tersebut juga dikelompokkan atau jika kolom tersebut muncul dalam fungsi agregat, itulah yang dimaksud dengan pesan kesalahan. Alasannya adalah PostgreSQL tidak akan tahu baris mana created_at
untuk digunakan ketika sekelompok baris digabungkan oleh klausa GROUP BY; beberapa database hanya diam-diam memilih baris sendiri, PostgreSQL lebih memilih untuk menjadi ketat dan ingin Anda menghapus ambiguitas sendiri.
Coba tentukan sendiri urutannya:
@categories = Micropost.select("category").group("category").order("category")
Opsi lainnya adalah menggunakan DISTINCT alih-alih GROUP BY untuk menghindari duplikat:
@categories = Micropost.select('DISTINCT(category)')
BTW, Anda seharusnya tidak melakukan hal semacam itu dalam tampilan, Anda mungkin ingin memindahkannya ke pengontrol Anda.
Masalah Anda yang sebenarnya adalah bahwa Anda mengembangkan di atas satu database saat menggunakan yang lain. Sebaiknya Anda mengalihkan lingkungan pengembangan ke PostgreSQL 8.3 (jika Anda menerapkan ke database bersama Heroku) atau PostgreSQL 9.0 (jika Anda menerapkan ke database khusus).