views:

531

answers:

1

I created a sortable list in my RoR project, unfortunately it's not saving the list position. Upon page refresh the items return to their normal spot. I've pasted the code below or you can git it: git://github.com/mdgrech/23notes-.git

app/views/notes/index.html.erb
/////////////////////////////////////////////////////////////////////////////////////////////
<div id="newNoteDiv"></div>

<ul id="notesList">
  <% for note in @notes %>
      <li id="<%=h note.position %>">
      <span class="handle">[drag]</span>
      <div id="listContent">
      <h3><%= link_to note.title, edit_note_path(note) %></h3>
      <p><%=h note.content %></p>
      <%= link_to "Destroy", note, :confirm => 'Are you sure?', :method => :delete %>
      </div>
      </li>
  <% end %>
</ul>

<%= sortable_element("notesList", :url => sort_notes_path, :handle => "handle" ) %>

app/controllers/notes_controller.rb
//////////////////////////////////////////////////////////////////////////////////////////
  def index
    @notes = Note.all(:order => "position")
  end

  def sort
    params[:notes].each_with_index do |id, index|
      Note.update_all(['position=?', index+1], ['id=?', id])
    end
    render :nothing => true
  end

config/routes.rb
//////////////////////////////////////////////////////////////////////////////////////////
  map.resources :notes, :collection => { :sort => :post }
  map.root :notes
app/models/note.rb
//////////////////////////////////////////////////////////////////////////////////////////
class Note < ActiveRecord::Base
  acts_as_list
end
A: 

Ok got it, the id you assign to the ul, the sortable_element you select, and params you specify are all supposed to be the same ie:

<ul id="foofooberry"
...
</ul>

<%= sortable_element('foofooberry', :url => sort_notes_path) %> 

  def sort
    params[:foofooberrry].each_with_index do |id, index|
      Note.update_all(['position=?', index+1], ['id=?', id])
    end
    render :nothing => true
  end
mdgrech