class ActiveRecord::Associations::HasManyAssociation
Public Instance Methods
writer(records)
click to toggle source
# File lib/activerecord_sortable/has_many_association.rb, line 8 def writer(records) original_writer(records) sort_entities(records) end
Also aliased as: original_writer
Private Instance Methods
sort_entities(records)
click to toggle source
# File lib/activerecord_sortable/has_many_association.rb, line 15 def sort_entities(records) if reflection.sortable? if respond_to? :through_reflection sort_many_to_many_entities(records) else sort_one_to_many_entities(records) end end end
sort_many_to_many_entities(records)
click to toggle source
# File lib/activerecord_sortable/has_many_association.rb, line 25 def sort_many_to_many_entities(records) record_positions = struct_record_positions(records) owner.send(through_reflection.name).each do |intermediate_entity| new_position = record_positions[intermediate_entity.send(source_reflection.foreign_key)] intermediate_entity.send(:"#{reflection.sortable_field}=", new_position) intermediate_entity.save end end
sort_one_to_many_entities(records)
click to toggle source
# File lib/activerecord_sortable/has_many_association.rb, line 34 def sort_one_to_many_entities(records) records.each_with_index do |record, index| record.send(:"#{reflection.sortable_field}=", index + 1) record.save end end
struct_record_positions(records)
click to toggle source
# File lib/activerecord_sortable/has_many_association.rb, line 41 def struct_record_positions(records) record_positions = {} records.each_with_index do |record, index| record_positions[record.id] = index + 1 end record_positions end