Rails: doit apparaître dans la clause GROUP BY ou être utilisé dans une fonction d'agrégation

Je suis en train de suivre le Bate tut sur les graphes & graphiques, mais je reçois un message d'erreur.

C'est l'erreur que je reçois

PG::Error: ERROR:  column "orders.created_at" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT created_at, sum(amount) as total_amount FROM "orders"...
               ^
: SELECT created_at, sum(amount) as total_amount FROM "orders"  WHERE ("orders"."created_at" BETW

Et c'est le code que j'utilise dans mes Commandes modèle

def self.total_grouped_by_day(start)
    orders = where(created_at: start.beginning_of_day..Time.zone.now)#.all
    orders = orders.group("date(created_at)")
    orders = orders.select("date(created_at), sum(amount) as total_amount")
    orders.group_by { |order| order.created_at.to_date }
  end

et dans mon helper

def orders_chart_data
        orders_by_day = Order.total_grouped_by_day(3.weeks.ago)
        (3.weeks.ago.to_date..Date.today).map do |date|
            {
                created_at: date,
                price: orders_by_day[date].first.try(:total_amount) || 0
            }
        end
    end

J'utilise Postgres (qui j'en suis sûr, est la principale raison pour laquelle je reçois cette erreur) & Rails 3.x.x.
Pourquoi est-ce que cette erreur se produise & comment puis-je résoudre ce problème?

Je vous remercie à l'avance


Dans ma console:

Order.where(created_at: 3.weeks.ago.beginning_of_day..Time.zone.now).group("date(created_at)").select("date(created_at), sum(amount) as total_amount")

& c'est ce que je reçois

[#<Order >, #<Order >, #<Order >] 

bizarre..


l'exécution de ce dans ma console: Order.where(created_at: 3.weeks.ago.beginning_of_day..Time.zone.now).group("date(created_at)").select("date(created_at), sum(amount) as total_amount").first.total_amount

me donne ceci:

Creating scope :page. Overwriting existing method Order.page.
  Order Load (18.1ms)  SELECT date(created_at), sum(amount) as total_amount FROM "orders" WHERE ("orders"."created_at" BETWEEN '2013-07-05 00:00:00.000000' AND '2013-07-26 23:50:38.876609') GROUP BY date(created_at) LIMIT 1
 => "10.0"

OriginalL'auteur goo | 2013-07-26