Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 在ActiveAdmin中重新排序_Ruby On Rails 3_Activeadmin_Acts As List - Fatal编程技术网

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');
}
缺点是它在作用域、筛选器和按某个列排序时效果不佳