私は並べ替え可能なリストについてRailscastに従っていました。しかし、2つの接続可能なソート可能なリストを作成しようとしたところ、シリアライズでは要素のIDのみを格納できることがわかりました。各リストの要素IDのためにリストのIDをシリアル化する方法はありますか?または、リストの要素親IDをマージして結果をシリアル化しますか?JQueryのソート可能なリストは、シリアル化するconnectWith?
この回答はjQuery-UI Sortable Connected-Lists save order and association to rails modelです。これは私がリスト間で要素をドラッグして正常にdbに保存することができましたが、1つのリストを持つ要素をソートすると適切に保存されませんでした。
ビュー
<% @project.tasks.group_by(&:column).each do |column, tasks| %>
<ul id='tasks_<%= column %>' data-update-url='<%= sort_project_tasks_url(@project) %>'>
<% tasks.sort_by! { |t| t.priority }.each do |task| %>
<li id="task_<%= task.id %>">
<%= task.name %>| <%= column %> | <b><%= task.priority %></b>
</li>
<% end %>
</ul>
<% end %>
私が使用したスクリプトプレーンシリアル化の変種。
jQuery ->
$('#tasks_done').sortable
connectWith: '#tasks_dev'
update: ->
$.post($(this).data('update-url'), $(this).sortable('serialize'))
スクリプト私はリンクされた質問から得ました。また、リスト間の要素をドラッグするために正常に動作しますが、リスト内のソートは、2番目のスクリプトバリアント
def sort
JSON.parse(params[:Activity]).each_with_index do |data, index|
id = data['id']
priority = index + 1
column = data['column']
column.slice! 'tasks_' # columns ids are tasks_<%= task.column %>
task = Task.find(id)
task.update_attributes(priority: priority, column: column)
end
のために更新、(今のところ強いのparamsなし)適切コントローラでアクションを対応
jQuery ->
$('#tasks_dev').sortable
connectWith: '#tasks_done'
update: (event, ui) ->
neworder = new Array()
$(this).children().each ->
column = $(this).parent().attr('id')
id = $(this).attr('id').match(/((?!task_).)*$/)[1]
neworder.push(
id: id
column: column
)
$.post($(this).data('update-url'), Activity: JSON.stringify(neworder))
保存されませんだから、主な問題は:リスト間で移動された要素を追跡しながら、ソート結果を1つのリストに保存する方法を理解することができません。サーバー側ではやりやすいようですが、フロントエンドには慣れていないので、クライアント上でparamsを適切に作成する方法を理解できません。
"[ask]"と "[mcve]"とそのliをお読みくださいnkedページ。コードの問題について質問するときは、問題を複製する最小限のコードを確認する必要があります。それがなければ、あなたのコードを想像してみる必要はありません。あなたが記述できる以上のことを想像することができたらうまくいかないでしょう。 –
申し訳ありません、更新された質問です。 –