差し迫った問題は、PostgreSQLに対して無効なSQLを生成していることです:
SELECT category FROM "microposts" GROUP BY category ORDER BY microposts.created_at DESC
ORDERBYが残りのクエリと一致しません。グループ化されたクエリで列を使用することはできません。ただし、その列もグループ化されていない場合、または列が集計関数に表示されている場合は、エラーメッセージの意味です。その理由は、PostgreSQLがどの行のcreated_at
を認識しないためです。 行のグループがGROUPBY句によって結合されるときに使用します。一部のデータベースは、それ自体で静かに行を選択します。PostgreSQLは厳密を優先し、あいまいさを自分で取り除くことを望んでいます。
自分で順序を指定してみてください:
@categories = Micropost.select("category").group("category").order("category")
もう1つのオプションは、DISTINCT を使用することです。 重複を避けるためにGROUPBYの代わりに:
@categories = Micropost.select('DISTINCT(category)')
ところで、ビューでそのようなことをするべきではありません。それをコントローラーに移動することをお勧めします。
あなたの本当の問題は、別のデータベースにデプロイしながら、あるデータベースの上で開発していることです。開発環境をPostgreSQL8.3(Heroku共有データベースにデプロイする場合)またはPostgreSQL 9.0(専用データベースにデプロイする場合)に切り替えることをお勧めします。