🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 5

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

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

1回答

1880閲覧

rails通知機能のエラー

suzukaze414

総合スコア8

Ruby on Rails 5

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

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

1クリップ

投稿2019/10/23 07:03

編集2019/10/23 07:37

現在railsでアプリを作っているものです。
【Rails】通知機能を誰でも実装できるように解説する【いいね、コメント、フォロー】
上記記事を参考にして通知機能を作っています。

いいねとフォローの通知は届くのですが、コメントの通知のみエラーが発生します。

発生している問題・エラーメッセージ

rocal

1 2ActiveRecord::StatementInvalid in CommentsController#create 3 4Mysql2::Error: Expression #1 of ORDER BY clause is not in SELECT list, references column 5'rails_development.comments.created_at' which is not in SELECT list; this is incompatible with 6DISTINCT: SELECT DISTINCT `comments`.`user_id` FROM `comments 7` WHERE `comments`.`micropost_id` = 1 AND `comments`.`user_id` != 1 8 ORDER BY `comments`.`created_at` DESC
# app/controllers/comments_controller.rb def create @micropost = Micropost.find(params[:micropost_id]) @comment = @micropost.comments.build(comment_params) @comment.user = current_user if @comment.save @micropost.create_notification_comment!(current_user, @comment.id) flash[:success] = "コメントをしました" redirect_back(fallback_location: root_path) else flash[:success] = "コメントできませんでした" redirect_back(fallback_location: root_path) end end
#app/models/micropost.rb def create_notification_comment!(current_user, comment_id) temp_ids = Comment.select(:user_id).where(micropost_id: id).where.not(user_id: current_user.id).distinct temp_ids.each do |temp_id| save_notification_comment!(current_user, comment_id, temp_id['user_id']) end save_notification_comment!(current_user, comment_id, user_id) if temp_ids.blank? end def save_notification_comment!(current_user, comment_id, visited_id) notification = current_user.active_notifications.new( micropost_id: id, comment_id: comment_id, visited_id: visited_id, action: 'comment' ) if notification.visitor_id == notification.visited_id notification.checked = true end notification.save if notification.valid? end

試したこと

MYSQLでテーブルを確認してもとくに問題はなかったです。

mysql

1 2MySQL [rails_development]> desc comments; 3+--------------+--------------+------+-----+---------+----------------+ 4| Field | Type | Null | Key | Default | Extra | 5+--------------+--------------+------+-----+---------+----------------+ 6| id | bigint(20) | NO | PRI | NULL | auto_increment | 7| content | varchar(255) | YES | | NULL | | 8| user_id | bigint(20) | YES | MUL | NULL | | 9| micropost_id | bigint(20) | YES | MUL | NULL | | 10| created_at | datetime | NO | | NULL | | 11| updated_at | datetime | NO | | NULL | | 12+--------------+--------------+------+-----+---------+----------------+ 136 rows in set (0.01 sec)

お手数ですがお願いたします。

補足情報(FW/ツールのバージョンなど)

ruby '2.6.3'
rails '5.2.3'
mysql '8.0.16'

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

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

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

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

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

suzukaze414

2019/10/23 12:20

ありがとうございます。 ただいま解決いたしました。 本当に助かりました。
guest

回答1

0

ベストアンサー

ORDER BY comments.created_at DESC

としているのに、同じカラムがSELECTの並び(今回はSELECT から FROM の間)にないからダメよ、って怒られています。

投稿2019/10/23 07:44

Orlofsky

総合スコア16417

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

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

suzukaze414

2019/10/23 08:24

ご回答ありがとうございます。 すいませんが同じカラムというのはどの部分のことを指しているのでしょうか?
Orlofsky

2019/10/23 08:27

`comments`.`created_at` です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問