Sha256: 1ab9b2030ac8b37347aeb96ede97a3764b29f93888e3ff2ac50158b214e3d0c1

Contents?: true

Size: 853 Bytes

Versions: 62

Compression:

Stored size: 853 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

62 entries across 62 versions & 1 rubygems

Version Path
renalware-core-2.0.113 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.112 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.111 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.110 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.109 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.108 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.106 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.105 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.104 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.103 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.102 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.101 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.100 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.99 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.98 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.97 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.96 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.95 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.94 lib/core_extensions/active_record/sort.rb
renalware-core-2.0.93 lib/core_extensions/active_record/sort.rb