0

我正在使用 jQuery UI Sortable 对我网站上的一些行进行排序。

这是我的看法:

<section class="data-list">
    <article id="item_<%= item.id %>" class="data sortable">
        <!-- stuff goes here -->
    </article>
</section>

这是我的 JS:

$('.data-list').sortable({items: '> .data'}).bind('sortupdate', function() {
    var release = getUrlVars()["id"];
    $.ajax({
        type: 'POST',
        data: $(this).sortable("serialize"),
        url: '/release_items/'+ release +'/prioritize'
    });
});

这将创建一个params['item']如下所示的数组:

["1537", "1536", "1540", "1541", "1542", "1543", "1544", "1545", "1547", "1546"]

这是我的控制器代码:

def prioritize
    @release = Release.find(params[:id])
    item = @release.release_items
    item.each do |i|
        i.priority = params['item'].index(i.id.to_s).to_i + 1
        i.save
    end
end

我的问题是我有几个release_itemsitem_type列区分。就目前而言,我目前在我的控制器中没有一个好的方法来按我的@release = Release.find(params[:id])行中的 item_type 进行过滤。

我想做的是确保在item.each do |i|循环中仅在项目位于params['item']数组中时才设置优先级。我该怎么做?如果这还不够清楚,请告诉我。谢谢!

编辑1:

对于每个版本,有n个版本项。这些发布项目按其item_type列(例如,常规、项目、数据、补丁)在站点上显示。所以在网站上有 4 个不同的项目列表,我希望能够单独对这 4 个列表进行排序。就像我上面所说的,params['item']传递给prioritize控制器​​中的动作的数组只有需要排序的项目,这是我想要的。

我遇到的问题是prioritize操作中的前两行将获取所有发布项目,而不仅仅是params['item']数组中的那些。数组中的值为需要排序的发布项的ID。我不想获取所有发布项目,而是只想获取params['item']数组中的项目。我也有一个 ReleaseItem 模型,我可以从中选择。所以,我正在尝试这样做:(我知道这不是正确的代码,只是为了清楚起见)

item = ReleaseItem.find(conditions: "id in params['item']")

这是否更有意义?我感谢您的帮助!

4

1 回答 1

1

我想我明白你想要做什么......

def prioritize
    @release = Release.find(params[:id])
    items = @release.release_items.where("id IN (?)", params['item'])
    items.each_with_index do |item, index|        
        item.priority = index + 1
        item.save
    end
end
于 2013-05-14T22:03:23.850 回答