Sha256: 8294eed2be9531b006fce833e03c9a7f94a0346e19b9c42d26c330c998b74940

Contents?: true

Size: 852 Bytes

Versions: 28

Compression:

Stored size: 852 Bytes

Contents

# frozen_string_literal: true

# Adds a sort method to ActiveRecord class.  Given a list of IDs, it will sort
# the records in the order of the ids.  Assumes that the model has the :position attribute.
#
# ActiveRecord::Base.class_eval do
#    include RailsExtensions::ActiveRecord::Sort
# end

module CoreExtensions
  module ActiveRecord
    module Sort
      def self.included(base)
        base.extend ClassMethods

        base.before_create :set_position
      end

      module ClassMethods
        def sort(ids)
          ids.each_with_index do |id, index|
            where(id: id).update_all(["position=?", index + 1])
          end
        end
      end

      def set_position
        return unless respond_to?(:position)
        self.position = (self.class.where("position < 99999").maximum(:position) || 0) + 1
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
renalware-core-2.0.46 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.45 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.44 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.43 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.42 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.41 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.40 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.39 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.38 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.37 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.36 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.35 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.34 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.33 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.32 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.31 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.30 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.28 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.27 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.26 lib/core_extensions/active_record/sort.rb