D&Dでソート出来る様にする。
sortable_elementにより、ソート処理を実装します。
相変わらず、ヘルパー使いまくりです。
12.sortable_elementをrhtmlに配置。
sortable_elementヘルパを利用してソート順を弄る様に追加します。
<html> <head> <title> 名簿管理アプリケーション </title> <%= javascript_include_tag :defaults %> </head> <body> <hr> <ul id="members"> <% for @member in @members %> <li id="member_<%=@member.id %>" > 名前 : <%= in_place_editor_field :member, 'name' , {}, { :save_text=>"保存", :cancel_text=>"取消" } %> / どんな人 : <%= in_place_editor_field :member, 'atitude' , {}, { :save_text=>"保存", :cancel_text=>"取消" } %> / <%= link_to_remote("削除", :url => { :action => :del,:id => @member.id }) %> </li> <% end %> </ul id="members"> <hr> <%= form_tag :action => 'add' , :id => @member %> <p>名前 <%= text_field 'member','name' %>どんな人 <%= text_field 'member','atitude' %><%= submit_tag '登録' %></p> <%= end_form_tag %> <%= sortable_element 'members',:url => { :action => "sort" } , :complete => visual_effect(:highlight, 'members',:duration => 0.5) %> </body> </html>
13.毎度のごとく受け皿を・・・。
ソート順を保存するsortメソッドを実装します。
class TestController < ApplicationController in_place_edit_for :member, :name in_place_edit_for :member, :atitude def list @members = Member.find(:all , :order => "position") end def add @member = Member.new(params[:member]) @member.save! unless @member.name.blank? redirect_to :action=>'list' end def del Member.find(params[:id]).destroy end def sort params[:members].each_with_index do | member, idx | sort_member = Member.find(member) sort_member.position = idx + 1 sort_member.save end render :nothing => true end end
これで完成です。
送られてきたパラメータを元に、ソート順を保存してます。