Активный администратор - сделайте ресурс сортируемым для определенного заказа на интерфейс - PullRequest
10 голосов
/ 06 декабря 2011

Я пытаюсь добавить порядок / повторный порядок для ресурса в Active Admin.Я понимаю, что вы можете сортировать по разным столбцам для просмотра при входе в систему. Я хотел бы иметь возможность упорядочить элементы, чтобы они отображались в определенном порядке на передней части.Любые идеи о том, как это сделать?

У меня уже есть столбец сортировки в базе данных.

Также я хотел бы отобразить элементы в указанном порядке в разделе администратора.

У кого-нибудь есть идеи, как мне это сделать?

Ответы [ 2 ]

25 голосов
/ 20 января 2012

Я реализовал это недавно, используя столбец с названием position в моей модели HomeSlide.

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")
0 голосов
/ 10 января 2012

У вас есть отдельный контроллер внешнего интерфейса? Для части activeadmin вашего вопроса:

Возможно иметь

config.sort_order = 'lastname_asc'

или

config.sort_order = 'created_at_desc'

объявление внутри блока ActiveAdmin.register вашей модели / ресурса.

В вашей модели вы можете поместить что-то вроде

default_scope :order => "id DESC"

Читая ваш вопрос, хотя вам кажется уместным прочитать некоторую документацию, вот часть, скопированная с http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html

class Article < ActiveRecord::Base
  scope :published, where(:published => true)
  scope :featured, where(:featured => true)

  def self.latest_article
    order('published_at desc').first
  end

  def self.titles
    map(&:title)
  end

end

Что позволяет вам вызывать методы, подобные этому:

Article.published.featured.latest_article
Article.featured.titles

Удачи.

...