現在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'
回答1件
あなたの回答
tips
プレビュー