35 lines
		
	
	
		
			670 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			670 B
		
	
	
	
		
			Ruby
		
	
	
	
| module Mongoid
 | |
|   module Sortable
 | |
|     extend ActiveSupport::Concern
 | |
| 
 | |
|     included do
 | |
|       field :sort_number, type: Integer
 | |
| 
 | |
|       after_initialize :set_sort_number
 | |
|     end
 | |
| 
 | |
|     module ClassMethods
 | |
|       def default_sort(sorted = true)
 | |
|         if !sorted
 | |
|           asc(:sort_number)
 | |
|         else
 | |
|           asc
 | |
|         end
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     private
 | |
| 
 | |
|     def set_sort_number
 | |
|       if self.new? && self.sort_number.nil?
 | |
|         last_record = self.class.desc(:sort_number).first
 | |
|         if last_record.sort_number
 | |
|           self.sort_number = (last_record.sort_number + 10) / 10 * 10
 | |
|         else
 | |
|           self.sort_number = 10
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |