2012-04-18 82 views
1

使用Rails 3獲取相關ID爲jQuery的排序connectWith序列化方法

在國表型號:

id 
country_id 
position 
created_at 
updated_at 

的Javascript:

$(".sortable_country").sortable({ 
    connectWith: ".sortable_country", 
    update: function() { 
     console.log($(this).sortable("serialize")); 
    } 
}); 

HTML:

<strong>Country 1</strong> 
<ul id="country_1" class="sortable_country"> 
    <li id="state_1"> 
     State 1 
    </li> 
    <li id="state_2"> 
     State 2 
    </li> 
    <li id="state_3"> 
     State 3 
    </li> 
    <li id="state_4"> 
     State 4 
    </li> 
</ul> 
<strong>Country 2</strong> 
<ul id="country_2" class="sortable_country"> 
    <li id="state_5"> 
     State 5 
    </li> 
    <li id="state_6"> 
     State 6 
    </li> 
    <li id="state_7"> 
     State 7 
    </li> 
    <li id="state_8"> 
     State 8 
    </li> 
</ul> 

spots_controller.rb:

def sort 
    params[:states].each_with_index do |id, index| 
    State.update_all([&rsquo;position=?&rsquo;, index+1], [&rsquo;id=?&rsquo;, id]) 
    end 
    render :nothing => true 
end 

請忽略其他所需的代碼,因爲我已簡化了用於故障排除目的的代碼。在這個例子中,我將State 5分類爲Country 1列表。排序後,返回序列化的結果是:

state[]=6&state[]=7&state[]=8 
state[]=1&state[]=2&state[]=3&state[]=5&state[]=4 

我如何可以包括相關country_id在序列化的結果,使我的應用程序可以適當地更新State 5country_id1,這是最初2排序前?

謝謝。

回答

1

將這個的.sortable()內:

update: function() { 
    $.post($(this).data('update-url'), $(this).sortable('serialize')) 
    .error(function() { 
    alert("Sorry, could not save the positions. Please refresh this page."); 
    }) 
} 

相關的ID將自動在各個崗位排序後公佈。