ปลั๊กอินผู้ดูแลระบบเพื่อเพิ่มตัวกรองที่กำหนดเองลงในหน้าดัชนีของคุณ ตัวกรองจะแสดงผลเป็นองค์ประกอบนอกพื้นที่ ดังนั้นจึงไม่ใช้พื้นที่บนหน้าดัชนีของคุณมากเกินไป ได้รับแรงบันดาลใจอย่างมากจากตัวกรองของ 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
ใบอนุญาตเอ็มไอที
ขอบคุณมากสำหรับแหล่งข้อมูลต่อไปนี้ที่ช่วยฉันได้มากในการสร้างอัญมณีนี้: