Plugin Administrate untuk menambahkan filter khusus ke halaman indeks Anda. Filter akan dirender sebagai komponen di luar kanvas, sehingga tidak akan memakan terlalu banyak ruang di halaman indeks Anda. Sangat terinspirasi oleh filter ActiveAdmin.
Mari kita sepakat bahwa tim Admin telah melakukan pekerjaan yang baik dengan fungsi pencarian atau filter default. Ini sudah mendukung beberapa bidang pencarian dan pencarian tabel relasional. Sangat mudah untuk menyesuaikannya (seperti mengaktifkan/menonaktifkan pencarian, menentukan bidang pencarian khusus, dll).
Namun ada beberapa kekurangan yang saya temukan:
registration_status dan employment_status , dan Anda ingin mencari status pendaftaran "aktif" saja, Anda akan mendapatkan semua catatan "aktif", termasuk status pekerjaan.Silakan bagikan pemikiran Anda jika Anda memiliki alasan lain.
administrate_filterable ke Gemfile Anda:
gem 'administrate_filterable'Dan kemudian jalankan:
$ bundle install
Atau, jalankan saja:
$ bundle add administrate_filterable
Untuk setiap sumber daya yang ingin Anda tambahkan filter khusus, tambahkan baris berikut ke pengontrol Administrate masing-masing.
include AdministrateFilterable :: FiltererContoh:
class UsersController < Administrate :: ApplicationController
include AdministrateFilterable :: Filterer
# ...
end Secara default, semua atribut dari COLLECTION_ATTRIBUTES akan dirender sebagai kolom filter. Anda dapat menimpanya dengan menambahkan FILTER_ATTRIBUTES ke file dasbor Administrate Anda.
Contoh ( app/dashboards/user_dashboard.rb ):
class UserDashboard < Administrate :: BaseDashboard
# ..
FILTER_ATTRIBUTES = [
:first_name ,
:last_name ,
:email ,
:created_at
] . freeze
# ..
end Dimungkinkan untuk menyesuaikan template filter (misalnya mengubah ikon tombol filter, dll). Anda dapat melakukan ini dengan mengganti template default di aplikasi Anda, cukup buat file baru bernama _index_filter.html.erb di folder sumber daya yang Anda inginkan.
Misalnya, jika Anda ingin mengganti template filter untuk sumber daya users , Anda perlu membuat file di app/views/admin/users/_index_filter.html.erb . Kemudian salin dan tempel konten dari template default di sini dan modifikasi sesuai kebutuhan Anda.
Jika Anda menggunakan saluran aset, Anda perlu menyertakan aset permata ini di file app/assets/config/manifest.js Anda:
// ... other code here ...
//= link administrate_filterable/application.css
//= link administrate_filterable/application.js Jalankan rails assets:precompile jika aset tidak dimuat.
Secara default, permata ini akan menambahkan tombol filter ke sebagian views/admin/application/_search.html.erb . Namun jika Anda telah mengganti sebagian itu di aplikasi Anda, Anda dapat menambahkan tombol secara manual dengan menambahkan baris berikut:
<%= render 'index_filter' %> Contoh ( app/views/admin/users/_search.html.erb ):
< form class =" search " role =" search " >
... other code here ...
</ form >
<%= render 'index_filter' %>scoped_resource diganti Permata ini menggunakan metode scoped_resource untuk memfilter sumber daya dengan mengesampingkan perilaku defaultnya. Jika Anda kebetulan juga mengganti metode ini di pengontrol aplikasi, Anda juga akan mengganti fungsi filter dan itu tidak akan berfungsi.
Untuk memperbaikinya, Anda perlu menambahkan kode berikut di baris terakhir metode scoped_resource yang diganti:
filtered_resources ( your_scoped_resource )Misalnya:
def scoped_resource
# Your custom filter logic here
resources = super . where ( status : 'active' )
# Add this line to make the filter work
filtered_resources ( resources )
end Karena saya menggunakan sebagian _search.html.erb untuk menambahkan tombol filter, tombol ini mungkin tidak muncul jika Anda mengubah semua atribut yang dapat dicari menjadi false di dasbor model. Jadi, pastikan Anda memiliki setidaknya satu atribut yang dapat dicari agar tombol filter muncul.
Alasan saya menggunakan parsial adalah karena:
_index_header.html.erb , tetapi bertentangan dengan tombol ekspor dari administrate_exportable. Menggunakan kedua permata mengakibatkan satu tombol hilang, karena penggantian sebagian. Masih banyak hal yang harus dilakukan untuk menjadikan permata ini lebih baik. Berikut beberapa di antaranya (diurutkan berdasarkan prioritas tertinggi terlebih dahulu):
belongs_to , dll) prompt , menambahkan opsi include_blank , dll) scoped_resource ) scoped_resource yang diganti) Jika Anda memiliki ide atau saran, beri tahu saya dengan membuat masalah atau permintaan tarik.
Anda dapat membantu saya meningkatkan permata ini dengan berkontribusi pada proyek ini. Bantuan apa pun sangat dihargai.
bundle exec rspecLisensi MIT
Terima kasih banyak atas sumber daya berikut yang banyak membantu saya dalam membuat permata ini: