Вашият непосредствен проблем е, че произвеждате невалиден SQL за PostgreSQL:
SELECT category FROM "microposts" GROUP BY category ORDER BY microposts.created_at DESC
Вашият ORDER BY не отговаря на останалата част от заявката ви. Не можете да използвате колона в групирана заявка, освен ако тази колона също не е групирана или ако колоната се появява в обобщена функция, това означава съобщението за грешка. Причината е, че PostgreSQL няма да знае кой ред е created_at
да се използва, когато група редове се комбинират от клаузата GROUP BY; някои бази данни просто мълчаливо избират ред сами, PostgreSQL предпочита да бъде строг и иска сами да премахнете неяснотата.
Опитайте сами да посочите поръчката:
@categories = Micropost.select("category").group("category").order("category")
Друг вариант е да използвате DISTINCT вместо GROUP BY, за да избегнете дублиране:
@categories = Micropost.select('DISTINCT(category)')
Между другото, наистина не трябва да правите такива неща в изглед, може да искате да го преместите в контролера си.
Вашият истински проблем е, че разработвате върху една база данни, докато внедрявате върху друга. Препоръчвам ви да превключите средата си за разработка на PostgreSQL 8.3 (ако внедрявате в споделена база данни на Heroku) или PostgreSQL 9.0 (ако внедрявате в специална база данни).