app/controllers/admin/comments_controller.rb
# frozen_string_literal: true
module Admin
class CommentsController < Admin::BaseController
load_and_authorize_resource
def index
# All available comments, grouped and sorted
@comments = grouped_comments(accessible_ordered_comments)
# Grouped, sorted, available comments, posted since current_user last login
@unread_comments = grouped_comments(accessible_ordered_comments.find_since_last_login(current_user))
# Grouped, sorted, available comments, posted by current_user
@posted_comments = grouped_comments(accessible_ordered_comments.find_comments_by_user(current_user))
end
private
# Returning all available comments, ordered by created_at: :desc and by event.title
def accessible_ordered_comments
Comment.accessible_by(current_ability).joins('INNER JOIN events ON commentable_id = events.id').order('events.title', 'comments.created_at DESC')
end
# Grouping all comments by conference, and by event. It returns {:conference => {:event => [{comment_2}, {comment_1 }]}}
def grouped_comments(remarks)
remarks.group_by{ |comment| comment.commentable.program.conference }.map {|conference, comments| [conference, comments.group_by{|comment| comment.commentable}]}.to_h
end
end
end