質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Q&A

解決済

1回答

715閲覧

ローカルでは動くのにヘロクではエラー画面になる

Sibutakiti

総合スコア18

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

0グッド

0クリップ

投稿2019/11/24 23:22

イベントごとに投稿できて、投稿にコメントをつける時すでに投稿した人をリスト化して選択したらメールで
通知できるシステムを作ってします。
そのリストを作る時のコードでローカルのsqliteでは正常に動くのにヘロクにアップしたらエラーがでました。
コードは下記。過去に同一投稿者が何度も投稿してたらダブルのでグループ化してます。

ruby(コントローラー)

1 @userplus=Comment.joins(:user).where(event_id:@event.id).where.not(user_id: @event.user_id) 2 @userplus=@userplus.order('user_id').group('user_id') 3 @userplus.each do |f| 4 @pts << Ptcollection.new(f.user_id,usernamereturn(f.user.id)+"さんに送る") 5 end

heroku logs --tail
2019-11-24T23:01:06.308894+00:00 app[web.1]: D, [2019-11-25T08:01:06.308794 #4] DEBUG -- : [e3e81008-aeb3-4eed-ae4c-1c3c26dc9d43] Comment Load (3.0ms) SELECT "comments".* FROM "comments" INNER JOIN "users" ON "users"."id" = "comments"."user_id" WHERE "comments"."event_id" = $1 AND ("comments"."user_id" != $2) GROUP BY "comments"."user_id" ORDER BY user_id [["event_id", 23], ["user_id", 1]]
2019-11-24T23:01:06.309359+00:00 app[web.1]: I, [2019-11-25T08:01:06.309276 #4] INFO -- : [e3e81008-aeb3-4eed-ae4c-1c3c26dc9d43] Completed 500 Internal Server Error in 178ms (ActiveRecord: 39.3ms)
2019-11-24T23:01:06.310295+00:00 app[web.1]: F, [2019-11-25T08:01:06.310223 #4] FATAL -- : [e3e81008-aeb3-4eed-ae4c-1c3c26dc9d43]
2019-11-24T23:01:06.310413+00:00 app[web.1]: F, [2019-11-25T08:01:06.310306 #4] FATAL -- : [e3e81008-aeb3-4eed-ae4c-1c3c26dc9d43] ActiveRecord::StatementInvalid (PG::GroupingError: ERROR: column "comments.id" must appear in the GROUP BY clause or be used in an aggregate function

画面では下記のエラー画面となる
We're sorry, but something went wrong.
If you are the application owner check the logs for more information.

ヘロクで正常に見れる方法をご教授頂きたくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PG::GroupingError: ERROR: column "comments.id" must appear in the GROUP BY clause or be used in an aggregate function

エラーメッセージのとおりです。Heroku上ではPostgreSQLで動いていますが、SQL文の扱いが違って、GROUP BYしたあとに取れる列が「GROUP BYの対象となった列」あるいは「集計関数の結果」に限られています。

何もしないと全列取ってきてしまいますので、@userplus.pluck(:user_id)で必要な列だけ取る形にすればいいかと思います。

投稿2019/11/25 00:51

maisumakun

総合スコア145186

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sibutakiti

2019/11/25 03:25

ありがとうございます。おかげさまで解決しました。ただ、@userplus=@userplus.group(:user_id).pluck(:user_id) でグループの後ろにpluck(:user_id)の設定が必要でここのところまた迷いました。 今見たら当たり前ですね。対応力高めたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問