# index.html.erb 

<ul id="projects">
  <% @projects.each_with_index do |project, index| %>
    <% content_tag_for :li, project do %>
      <%= project.name %>
      <%= button_to('up', :action => 'sort', :projects => @projects.swap(index, index -1)) if index > 0 %>
      <%= button_to('down', :action => 'sort', :projects => @projects.swap(index, index +1)) if index < @projects.length - 1 %>
    <% end %>
  <% end %>
</ul>

#projects_controller.rb

def sort
  params[:projects].each_with_index do |id, index|
    Project.update_all(['position=?', index+1], ['id=?', id])
  end
  redirect_to projects_path
end

# application_controller.rb

class Array
  def swap(a,b)
    swapped = self.clone
    swapped[a], swapped[b] = self[b], self[a]
    swapped
  end
end