当前位置:  开发笔记 > 编程语言 > 正文

活动管理员 - 为前端的特定订购创建可排序的资源

如何解决《活动管理员-为前端的特定订购创建可排序的资源》经验,为你挑选了1个好方法。

我正在尝试向Active Admin中的资源添加排序/重新排序.我了解您可以按登录时的不同列进行排序.我想要做的是能够订购商品,以便在前端按特定顺序显示.有关如何实现这一目标的任何想法?

我已经在数据库中有一个排序列.

另外,我想在管理部分中以特定顺序显示项目.

任何人对我如何实现这一点有任何想法?



1> 小智..:

我最近在HomeSlide模型上使用名为position的列实现了这一点.

ActiveAdmin.register HomeSlide do
  config.sort_order = 'position_asc'

  index do
    column :title
    default_actions
  end

  # This action is called by javascript when you drag and drop a column
  # It iterates through the collection and sets the new position based on the
  # order that jQuery submitted them
  collection_action :sort, :method => :post do
    params[:home_slide].each_with_index do |id, index|
      HomeSlide.update_all(['position=?', index+1], ['id=?', id])
    end
    render :nothing => true
  end

end

将此添加到您的active_admin javascripts(咖啡脚本)

sendSortRequestOfModel = (model_name) ->
  formData = $('#' + model_name + ' tbody').sortable('serialize')
  formData += "&" + $('meta[name=csrf-param]').attr("content") + "=" + encodeURIComponent($('meta[name=csrf-token]').attr("content"))
  $.ajax
    type: 'post'
    data: formData
    dataType: 'script'
    url: '/admin/' + model_name + '/sort'

jQuery ($) ->

  # home page slides
  if $('body.admin_home_slides.index').length
    $( "#home_slides tbody" ).disableSelection()
    $( "#home_slides tbody" ).sortable
      axis: 'y'
      cursor: 'move'
      update: (event, ui) ->
        sendSortRequestOfModel("home_slides")


不会在`each`块中调用`HomeSlide.update_all`来破坏`update_all`的目的?AFAIKS,应该用要更新的项列表调用,或者应该用更简单的`HomeSlide.update(id,:position => index + 1)`替换.
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有