2011-12-05 20 views
10

Tôi đang cố gắng thêm thứ tự/sắp xếp lại tài nguyên trong Quản trị viên đang hoạt động. Tôi hiểu rằng bạn có thể sắp xếp theo các cột khác nhau để xem trong khi đăng nhập. Điều tôi muốn làm là có thể đặt hàng các mặt hàng để chúng hiển thị theo thứ tự cụ thể ở giao diện người dùng. Bất kỳ ý tưởng về cách thực hiện điều này?Quản trị viên hoạt động - Đặt tài nguyên có thể sắp xếp cho thứ tự cụ thể trên giao diện người dùng

Tôi có cột sắp xếp trong cơ sở dữ liệu.

Ngoài ra, tôi muốn hiển thị các mục theo thứ tự cụ thể đó trong phần quản trị.

Bất kỳ ai có ý tưởng về cách tôi thực hiện điều này?

Trả lời

25

Tôi đã triển khai gần đây bằng cột được gọi là vị trí trên mô hình HomeSlide của tôi.

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 

Thêm phần này vào javascripts active_admin của bạn (cà phê kịch bản)

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

Cuối cùng có xung quanh để thực hiện điều này. CẢM ƠN BẠN!!!!!!! Làm việc như người ở. –

+0

Cảm ơn bạn đã trả lời :) – Awea

+0

Không thể tin rằng đó là * điều đó * dễ dàng! Kudo, bạn đời! – dimitarvp

0

Bạn có bộ điều khiển giao diện người dùng riêng biệt không? Đối với phần activeadmin câu hỏi của bạn:

Có thể có một

config.sort_order = 'lastname_asc' 

hoặc

config.sort_order = 'created_at_desc' 

khai bên trong khối ActiveAdmin.register của mô hình/tài nguyên của bạn.

Trong mô hình của bạn, bạn có thể đặt một cái gì đó giống như

default_scope :order => "id DESC" 

Đọc câu hỏi của bạn mặc dù nó có vẻ thích hợp để bạn có thể đọc một số tài liệu, đây là một phần sao chép từ 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 

nào cho phép bạn gọi các phương thức như sau:

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

Chúc may mắn.

Các vấn đề liên quan