2

私はこれに対する解決策をあちこち探しましたが、私の特定の問題に合うもの、または私が理解できるものを見つけることができませんでした。JQuery UIのSortableを使用して、ドラッグアンドドロップインターフェイスを使用して「選挙」に「投票」をキャストできるRoRアプリがあります。ドラッグアンドドロップリストの各要素を「設定」と呼びます。すべての「設定」は、並べ替えられていない(sortable2)列から始まり、ユーザーはそれらを並べ替えられた列(sortable1)にドラッグします。ユーザーが「sortable1」にドラッグした「設定」の位置のみを保存したい。

ドラッグアンドドロップには、JQuery UIのSortableを使用しましたが、インターフェイスは非常に優れています。しかし、実際に各設定の位置を送信して、最終的にデータベースに記録するのに問題があります。これは私の最初のWebアプリであり、これは非常に新しいものです。よろしくお願いします。これが私が持っているコードです:

新しい投票を作成するためのビューで:

<script>
$(function() {
  $( "ul.droptrue" ).sortable({
  connectWith: "ul"
});

$( "#sortable1, #sortable2" ).disableSelection();
});

<ul id="sortable1" class='droptrue'>
Preferences:

</ul>

<ul id="sortable2" class='droptrue'>
Unranked candidates:
  <% @vote.preferences.each do |preference| %>
    <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>      
    <%= preference.candidate.name %></li>
  <% end %>
</ul>

オンラインで見つけたアドバイスから、votes_controller.rbに「sort」を追加しました。

class VotesController < ApplicationController
  respond_to :html, :json

  # I added this 
  def sort
      params[:preferences].each_with_index do |id, index|
         @vote.preferences.update(['position=?', index+1], ['id=?', id])
      end
      render nothing: true
  end

投票.rbでは、私は持っています:

class Vote < ActiveRecord::Base
    # ...
    has_many :preferences
    accepts_nested_attributes_for :preferences, allow_destroy: true, reject_if: lambda { |c| c.values.all?(&:blank?) }
end

Preferences.rbには、次のものがあります。

class Preference < ActiveRecord::Base
   attr_accessible :position
   belongs_to :vote, dependent: :destroy
end

ルート.rbには、次のものがあります。

resources :votes do
   put :sort
end

正直なところ、誰かが私のヒーローになって兄弟を助けてくれるなら、それは私の一日になるでしょう。冗長かもしれない何かを投稿することを避けるために私はかなり長い間検索しました、しかし私がここでそしてグーグルを通して見つけたすべては私を助けることができませんでした。ありがとうございました。

4

1 に答える 1

0

私たちが行っている方法は次のとおりです。

  1. 「ソート可能」で「停止」イベントを使用します。
  2. stop イベントでは、"ul" のすべての要素を index で反復処理します。インデックスはアイテムの「ソート位置」です。
  3. ajax POST を作成して、すべてのアイテムの位置を変更します。
于 2012-06-17T04:41:19.207 に答える