ruby-on-rails-3 - 在 ActiveAdmin 中重新排序

标签 ruby-on-rails-3 activeadmin acts-as-list

有时我们需要重新排序我们的资源和 acts_as_list对于这项任务确实很有用。我的问题是: 实现 ActiveAdmin 中某些资源重新排序的最佳方法是什么?框架。

我知道没有“最好的方法”,但我想所有的回复都是受欢迎的,这样人们就能够找到此类问题的各种答案。


我自己写下了一种可能的解决方案,它使用 jquery 进行拖放,但不能使用过滤器、范围和排序。也许有理由专门为拖放重新排序提供单独的 View ,或者也许有人使用复选框、按钮等制作了不同的 UI...

请分享!

最佳答案

Sortable lists with acts_as_list and ActiveAdmin 中描述了其中一个解决方案。该解决方案非常好,我自己可以添加的只是一些不同的序列化函数和一些更多的装饰性内容:

首先,我认为将所需资源移动到指定位置而不是移动其后面的所有资源会更有效。这是我更新的 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_to_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

所以它只使用acts_as_list的insert_atmove_to_bottom方法。

此外,我还添加了一个 repaintTable,因此奇数行和偶数行在切换后仍然具有不同的颜色,我在 ajax 请求完成后调用它。

function repaintTable()
{
  $("#shows tr").removeClass('even odd');
  $("#shows tr").filter(":odd").addClass('odd');
  $("#shows tr").filter(":even").addClass('even');
}

缺点是它在范围、过滤器和按某些列排序方面效果不佳。

关于ruby-on-rails-3 - 在 ActiveAdmin 中重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11594054/

相关文章:

ruby-on-rails - 如何验证使用 Accepts_nested_attributes_for 的父模型

ruby-on-rails-3 - #<用户 session : {:unauthorized_record= >"<protected>"}>

rspec - 使用 rspec 测试 ActiveAdmin

ruby-on-rails - Ruby/Rails-从我的应用程序中删除ActiveAdmin

ruby-on-rails - Rails - 具有多个模型的acts_as_list

ruby-on-rails - rails : sort a has_many using :order is not working due to order by timestamp

ruby-on-rails - Rails 3,仅比较rails中两个日期时间列的日期

javascript - 如何将 Rails 变量传递到必须动态刷新(每 60 秒)的 View 的 CSS?

ruby-on-rails - 使用传入的参数在 ActiveAdmin 中的模型上按方法过滤

ruby-on-rails - 当使用 update_attributes 更新资源时,acts_as_list 是否应该自动重新排序项目?