Skip to content

Instantly share code, notes, and snippets.

@calvincorreli
Created November 2, 2010 11:55
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save calvincorreli/659532 to your computer and use it in GitHub Desktop.
Save calvincorreli/659532 to your computer and use it in GitHub Desktop.
Reordering children using Sortable with nested_set / Awesome nested_set, and similar
def reorder_children(ordered_ids)
ordered_ids = ordered_ids.map(&:to_i)
current_ids = children.map(&:id)
unless current_ids - ordered_ids == [] && ordered_ids - current_ids == []
raise ArgumentError, "Not ordering the same ids that I have as children. My children: #{current_ids.join(", ")}. Your list: #{ordered_ids.join(", ")}. Difference: #{(current_ids - ordered_ids).join(', ')} / #{(ordered_ids - current_ids).join(', ')}"
end
j = 0
transaction do
for new_id in ordered_ids
old_id = current_ids[j]
if new_id == old_id
j += 1
else
Category.find(new_id).move_to_left_of(old_id)
current_ids.delete(new_id)
end
end
end
end
@bishopandco
Copy link

Found this on StackOverflow ... what would order_ids be? I am hoping just an array of IDs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment