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 :: Filterer
Contoh:
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 rspec
Lisensi MIT
Terima kasih banyak atas sumber daya berikut yang banyak membantu saya dalam membuat permata ini: