我正在使用 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_items
以item_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']")
这是否更有意义?我感谢您的帮助!