2012-05-09 20 views
6

Trong mô hình ActiveAdmin của tôi, tôi có phạm vi tùy chỉnh để hiển thị các bản ghi đã xóa và một số bộ lọc để tìm kiếm bản ghi theo các cột cụ thể.ActiveAdmin - Sử dụng phạm vi với bộ lọc

Sử dụng bộ lọc riêng lẻ hoặc kết hợp với nhau hoạt động như mong đợi.

Sử dụng phạm vi hoạt động như mong đợi.

Vấn đề là việc sử dụng phạm vi dường như sẽ ghi đè tất cả các bộ lọc và sau khi chọn phạm vi mà bất kỳ bộ lọc nào được thêm sẽ không làm gì.

Có ai có ý tưởng nào ở đây không? Những gì tôi muốn là để có thể hiển thị một phạm vi cụ thể và sau đó vẫn có thể lọc kết quả trong phạm vi đó.

ActiveAdmin.register Example do 
     scope :deleted do |example| 
     Example.only_deleted 
     end 

     scope :all do |example| 
     Example.with_deleted 
     end 

     filter :title 
     filter :description 

     index do 
     column :title 
     column :description 
     end 

    end 

[cập nhật]

Đây là giải pháp tôi đã đi với. Tôi đặt phạm vi with_deleted trên mô hình và bao gồm bộ lọc ở bên để hiển thị/ẩn các kết quả đã xóa. Không lý tưởng vì kết quả ban đầu đã xóa cũng được hiển thị, nhưng ít nhất tất cả các bộ lọc đều có thể được sử dụng cùng nhau.

ActiveAdmin.register Example.with_deleted do 

     filter :title 
     filter :description 
     filter :deleted, :as => :select, :collection => {:true => nil, :false => false } 

     index do 
     column :title 
     column :description 
     end 

    end 
+0

tương tự nhưng không trùng lặp: http://stackoverflow.com/questions/12038138/how -to-filter-is-null-in-activeadmin –

+0

Nó không phải là một vấn đề trong Active Admin hiện tại nữa – MikDiet

Trả lời

0

Thay vì phạm vi tạo bộ lọc khác sẽ chọn bản ghi trên tiêu chí dựa trên các ví dụ bị xóa hoặc tất cả. Và áp dụng nhiều bộ lọc tùy thích.

Hoặc trong bộ lọc trong khi tính toán bộ chọn mà trên đó bạn sẽ chạy bộ lọc chạy phạm vi phù hợp và sau đó đặt điều kiện bộ lọc trên bộ chọn đó.

0

Theo mặc định, ActiveAdmin muốn phạm vi chỉ cung cấp tên phương thức được ký hiệu. Khi bạn xác định phạm vi theo cách này, chúng có thể bị xích vào phạm vi đã được bộ lọc cung cấp và chúng hoạt động liền mạch với nhau.

Vì vậy, sai lầm của bạn rõ ràng là gọi Model#class_method thay vì cung cấp :symbolized_class_method_name (với chủ sở hữu ngụ ý của mô hình hiện tại).

Bộ lọc và phạm vi sẽ làm việc với nhau nếu bạn thay thế mã này:

scope :all do |example| 
    Example.with_deleted 
end 

scope :deleted do |example| 
    Example.only_deleted 
end 

Với điều này:

scope "Deleted", :only_deleted 
scope "All", :with_deleted 
+1

Năm năm sau, tài liệu ActiveAdmin vẫn không giải quyết vấn đề này. Tôi chạy vào cùng một vấn đề trước khi tôi tìm ra. – armchairdj

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