Ruby on Rails可排序列表

时间:2009-08-26 17:21:00

标签: ruby-on-rails jquery-ui-sortable

我在我的RoR项目中创建了一个可排序列表,遗憾的是它没有保存列表位置。页面刷新后,项目将返回正常位置。我已粘贴下面的代码或你可以git它: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

1 个答案:

答案 0 :(得分:0)

好的,你分配给ul的id,你选择的sortable_element和你指定的params都应该是相同的,即:

<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