グラフ&のBateさんのTutに従っていますが、エラーが発生しています。 Rails:GROUP BY句に表示するか、集計関数で使用する必要があります
この
は私が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
を取得していますエラーで、これは私が私の注文モデル
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
で、私のヘルパーで使用しているコードです
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
私はPostgresを使用しています(私はかなり確信しています私はこのエラーが出ている主な理由)& Rails 3.x.x. このエラーはなぜ発生しますか&どうすれば修正できますか?
は、事前に私のコンソールで
ありがとう:
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")
&これは私が変な
[#<Order >, #<Order >, #<Order >]
得るものです。..
私のコンソールでこれを実行している
: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
は私にこれを与える:
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"
私は実際には最初にこれを試してみましたが、このエラー '属性行方不明になっています:次のGROUP_BYラインでそのエラーを取得created_at' – goo
を?あなたはするであろう。おそらくあなたが望むものではないので、あなたはあなたがそのgroup_byを行う前にあなたが戻ってきたものを見なければなりません。列がもう返されないように、選択を微調整したことを忘れないでください。 –
そうですね、それを 'orders.group_by {| order | order.date(created_at).to_date} '正しい?私はそれをした後、 '
goo