Váš bezprostřední problém je, že vytváříte neplatné SQL pro PostgreSQL:
SELECT category FROM "microposts" GROUP BY category ORDER BY microposts.created_at DESC
Vaše ORDER BY neodpovídá zbytku vašeho dotazu. Sloupec nelze použít ve seskupeném dotazu, pokud tento sloupec není také seskupený nebo pokud se sloupec neobjeví v agregační funkci, to znamená chybová zpráva. Důvodem je, že PostgreSQL nebude vědět, který řádek je created_at
použít, když je skupina řádků kombinována klauzulí GROUP BY; některé databáze si jen tiše vyberou řádek samy, PostgreSQL upřednostňuje přísnost a chce, abyste tuto nejednoznačnost odstranili sami.
Zkuste zadat objednávku sami:
@categories = Micropost.select("category").group("category").order("category")
Další možností je použít DISTINCT místo GROUP BY, aby se předešlo duplicitám:
@categories = Micropost.select('DISTINCT(category)')
BTW, opravdu byste neměli dělat takové věci v pohledu, možná to budete chtít přesunout do svého ovladače.
Váš skutečný problém je v tom, že vyvíjíte nad jednou databází a nasazujete na jinou. Doporučil bych vám přepnout vývojové prostředí na PostgreSQL 8.3 (pokud nasazujete do sdílené databáze Heroku) nebo PostgreSQL 9.0 (pokud nasazujete do vyhrazené databáze).