Ruby on rails 3 在ActiveAdmin中重新排序
有时我们需要重新安排我们的资源,这对完成这项任务非常有用。我的问题是: 在框架中实现某些资源重新排序的最佳方法是什么 我知道没有“最好的方法”,但我想所有的回答都是受欢迎的,这样人们就能找到这类问题的各种答案Ruby on rails 3 在ActiveAdmin中重新排序,ruby-on-rails-3,activeadmin,acts-as-list,Ruby On Rails 3,Activeadmin,Acts As List,有时我们需要重新安排我们的资源,这对完成这项任务非常有用。我的问题是: 在框架中实现某些资源重新排序的最佳方法是什么 我知道没有“最好的方法”,但我想所有的回答都是受欢迎的,这样人们就能找到这类问题的各种答案 我自己写了一个可能的解决方案,它使用jquery和拖放,但不使用过滤器、作用域和排序。也许有理由为拖放重新排序指定单独的视图,或者可能有人用复选框、按钮等完成了不同的UI 请分享 中描述了其中一种解决方案。解决方案非常好,我能添加的只是一个稍微不同的序列化函数和一些装饰性的东西: 首先,
我自己写了一个可能的解决方案,它使用jquery和拖放,但不使用过滤器、作用域和排序。也许有理由为拖放重新排序指定单独的视图,或者可能有人用复选框、按钮等完成了不同的UI
请分享 中描述了其中一种解决方案。解决方案非常好,我能添加的只是一个稍微不同的序列化函数和一些装饰性的东西: 首先,我认为将所需的资源移动到指定的位置,而不是移动后面的所有资源,效率会更高。这是我更新的
update
功能:
$("#shows tbody").sortable({
update: function(event, ui){
var request
if (ui.item.next().length == 0)
request = {method: 'move_to_bottom', target: ui.item.find("span.show").data("id")}
else
request = {method: 'put_at_index', data: ui.item.next().find("span.show").data("id"), target: ui.item.find("span.show").data("id")}
$.ajax({
url: "/admin/shows/sort",
type: 'post',
headers: {
'X-Transaction': 'sort shows',
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
},
data: request,
complete: function(){
$(".paginated_collection").effect("highlight");
repaintTable();
}
});
}
});
如您所见,我要么发送一个put_at_index
方法,其中包含要放置的内容和项目的索引(实际上是我们拖动的项目下方的项目),如果它被拖动到列表的底部,并且在它下方(之后)没有任何内容然后我只发送一个move\u to\u bottom
方法,其中包含要移动到底部的数据
sort
操作也已更改,现在的工作方式如下:
collection_action :sort, :method => :post do
case params[:method]
when 'move_to_bottom'
Show.find(params[:target]).move_to_bottom
when 'put_at_index'
Show.find(params[:target]).insert_at(Show.find(params[:data]).position)
end
head 200
end
因此,它只使用insert\u at
和move\u to\u bottom
acts\u as\u list方法
此外,我还添加了一个重绘表
,因此奇数行和偶数行在切换后仍然具有不同的颜色,我在ajax请求完成后调用它
function repaintTable()
{
$("#shows tr").removeClass('even odd');
$("#shows tr").filter(":odd").addClass('odd');
$("#shows tr").filter(":even").addClass('even');
}
缺点是它在作用域、筛选器和按某个列排序时效果不佳