2

我已經遍尋全面的解決方案,但找不到適合我的具體問題或我能理解的問題。我有一個RoR應用程序,允許用戶使用JQuery UI的Sortable在拖放界面上對「選舉」進行「投票」。我將拖放列表中的每個元素都稱爲「首選項」。所有「首選項」從未排序(sortable2)列開始,用戶將它們拖到排序列(sortable1)。我只想保存用戶拖入「sortable1」的「首選項」的位置。Ruby on Rails with JQuery可排序問題

對於拖放,我使用JQuery UI的Sortable,並且界面非常好。但是,實際上,我提交每個首選項的位置以最終將其記錄在數據庫中時遇到問題。這是我的第一個網絡應用程序,我對此很新。提前感謝您的幫助。下面是我的代碼:

在視圖中創建一個新的投票:

<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:

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 

在vote.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 

在preference.rb,我有:

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

在routes.rb中,我有:

resources :votes do 
    put :sort 
end 

老實說,它將使我的一天,如果有人將我的英雄和幫助兄弟出來了。我搜索了很長時間以避免發佈可能是多餘的東西,但是我在這裏和通過谷歌找到的所有內容都無法幫助我。謝謝。

回答

0

我們正在做的方式是:

  1. 的 「排序」 使用'stop' event
  2. 在停止事件中,遍歷索引爲「ul」的所有元素。索引是項目的「排序位置」。
  3. 製作一個ajax POST來修改所有項目的位置。