class Report < ApplicationRecord belongs_to :user validates :type, presence: true validates :target_id, presence: true validates :user_id, presence: true def target type.sub('Reports::', '').constantize.where(id: target_id).first end def append_reason(new_reason) if reason.nil? update(reason: new_reason) else update(reason: [reason || "", new_reason].join("\n")) end end class << self include CursorPaginatable define_cursor_paginator :cursored_reports, :list_reports define_cursor_paginator :cursored_reports_of_type, :list_reports_of_type def list_reports(options = {}) self.where(options.merge!(deleted: false)).reverse_order end def list_reports_of_type(type, options = {}) self.where(options.merge!(deleted: false)).where('LOWER(type) = ?', "reports::#{type}").reverse_order end end end