ปลั๊กอินผู้ดูแลระบบเพื่อเพิ่มตัวกรองที่กำหนดเองลงในหน้าดัชนีของคุณ ตัวกรองจะแสดงผลเป็นองค์ประกอบนอกพื้นที่ ดังนั้นจึงไม่ใช้พื้นที่บนหน้าดัชนีของคุณมากเกินไป ได้รับแรงบันดาลใจอย่างมากจากตัวกรองของ ActiveAdmin
ยอมรับว่าทีมผู้ดูแลระบบทำงานได้ดีมากด้วยฟังก์ชันการค้นหาหรือตัวกรองเริ่มต้น รองรับช่องค้นหาหลายช่องและการค้นหาตารางเชิงสัมพันธ์แล้ว ปรับแต่งได้ง่าย (เช่น เปิด/ปิดการค้นหา กำหนดช่องค้นหาที่กำหนดเอง ฯลฯ)
แต่ฉันพบข้อเสียบางประการ:
registration_status และ employment_status และคุณต้องการค้นหาเฉพาะสถานะการลงทะเบียน "ใช้งานอยู่" เท่านั้น คุณจะได้รับบันทึก "ใช้งานอยู่" ทั้งหมด รวมถึงสถานะการจ้างงานด้วยโปรดแบ่งปันความคิดของคุณหากคุณมีเหตุผลอื่นใด
เพิ่ม administrate_filterable ให้กับ Gemfile ของคุณ:
gem 'administrate_filterable'แล้วดำเนินการ:
$ bundle install
หรือเพียงแค่เรียกใช้:
$ bundle add administrate_filterable
สำหรับแต่ละทรัพยากรที่คุณต้องการเพิ่มตัวกรองแบบกำหนดเอง ให้เพิ่มบรรทัดต่อไปนี้ในตัวควบคุมการดูแลระบบตามลำดับ
include AdministrateFilterable :: Filtererตัวอย่าง:
class UsersController < Administrate :: ApplicationController
include AdministrateFilterable :: Filterer
# ...
end ตามค่าเริ่มต้น คุณลักษณะทั้งหมดจาก COLLECTION_ATTRIBUTES จะถูกแสดงผลเป็นฟิลด์ตัวกรอง คุณสามารถแทนที่สิ่งนี้ได้โดยเพิ่ม FILTER_ATTRIBUTES ลงในไฟล์แดชบอร์ดของผู้ดูแลระบบ
ตัวอย่าง ( app/dashboards/user_dashboard.rb ):
class UserDashboard < Administrate :: BaseDashboard
# ..
FILTER_ATTRIBUTES = [
:first_name ,
:last_name ,
:email ,
:created_at
] . freeze
# ..
end คุณสามารถปรับแต่งเทมเพลตตัวกรองได้ (เช่น การเปลี่ยนไอคอนปุ่มตัวกรอง ฯลฯ) คุณสามารถทำได้โดยการแทนที่เทมเพลตเริ่มต้นในแอปพลิเคชันของคุณ เพียงสร้างไฟล์ใหม่ชื่อ _index_filter.html.erb ในโฟลเดอร์ทรัพยากรที่คุณต้องการ
ตัวอย่างเช่น หากคุณต้องการแทนที่เทมเพลตตัวกรองสำหรับทรัพยากร users คุณต้องสร้างไฟล์ใน app/views/admin/users/_index_filter.html.erb จากนั้นเพียงคัดลอกและวางเนื้อหาจากเทมเพลตเริ่มต้นที่นี่ และแก้ไขให้เหมาะกับความต้องการของคุณ
หากคุณใช้ไปป์ไลน์สินทรัพย์ คุณจะต้องรวมเนื้อหาของ Gem นี้ไว้ในไฟล์ app/assets/config/manifest.js ของคุณ:
// ... other code here ...
//= link administrate_filterable/application.css
//= link administrate_filterable/application.js เรียกใช้ rails assets:precompile หากไม่ได้โหลดเนื้อหา
ตามค่าเริ่มต้น Gem นี้จะเพิ่มปุ่มตัวกรองให้กับ views/admin/application/_search.html.erb บางส่วน แต่ถ้าคุณได้แทนที่บางส่วนนั้นในแอปพลิเคชันของคุณ คุณสามารถเพิ่มปุ่มด้วยตนเองโดยเพิ่มบรรทัดต่อไปนี้:
<%= render 'index_filter' %> ตัวอย่าง ( app/views/admin/users/_search.html.erb ):
< form class =" search " role =" search " >
... other code here ...
</ form >
<%= render 'index_filter' %>scoped_resource ที่ถูกแทนที่ Gem นี้ใช้เมธอด scoped_resource เพื่อกรองทรัพยากรโดยการแทนที่พฤติกรรมเริ่มต้น หากคุณบังเอิญแทนที่วิธีนี้ในตัวควบคุมแอปพลิเคชันของคุณ คุณจะแทนที่ฟังก์ชันตัวกรองด้วย และมันจะไม่ทำงาน
ในการแก้ไขปัญหานี้ คุณต้องเพิ่มโค้ดต่อไปนี้ในบรรทัดสุดท้ายของเมธอด scoped_resource ที่ถูกแทนที่:
filtered_resources ( your_scoped_resource )ตัวอย่างเช่น:
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 เนื่องจากฉันใช้ _search.html.erb บางส่วนเพื่อเพิ่มปุ่มตัวกรอง จึงอาจไม่แสดงหากคุณเปลี่ยนแอตทริบิวต์ที่ค้นหาได้ทั้งหมดเป็นเท็จในแดชบอร์ดโมเดล ดังนั้นตรวจสอบให้แน่ใจว่าคุณมีแอตทริบิวต์ที่สามารถค้นหาได้อย่างน้อยหนึ่งรายการเพื่อให้ปุ่มตัวกรองปรากฏขึ้น
เหตุผลที่ฉันใช้บางส่วนเป็นเพราะ:
_index_header.html.erb บางส่วน แต่มันขัดแย้งกับปุ่มส่งออกจาก administrate_exportable การใช้อัญมณีทั้งสองจะทำให้ปุ่มหายไปเพียงปุ่มเดียว เนื่องจากการแทนที่บางส่วน ยังมีอีกหลายสิ่งที่ต้องทำเพื่อทำให้อัญมณีนี้ดีขึ้น นี่คือบางส่วน (เรียงตามลำดับความสำคัญสูงสุดก่อน):
belongs_to ฯลฯ ) prompt เพิ่มตัวเลือก include_blank ฯลฯ ) scoped_resource ) scoped_resource ที่ถูกแทนที่) หากคุณมีความคิดหรือข้อเสนอแนะใด ๆ โปรดแจ้งให้เราทราบโดยสร้างปัญหาหรือดึงคำขอ
คุณสามารถช่วยฉันปรับปรุงอัญมณีนี้ได้โดยการมีส่วนร่วมในโครงการนี้ ความช่วยเหลือใด ๆ ที่ได้รับความนิยมอย่างสูง
bundle exec rspecใบอนุญาตเอ็มไอที
ขอบคุณมากสำหรับแหล่งข้อมูลต่อไปนี้ที่ช่วยฉันได้มากในการสร้างอัญมณีนี้: