색인 페이지에 사용자 정의 필터를 추가하는 관리 플러그인. 필터는 캔버스 외부 구성 요소로 렌더링되므로 색인 페이지에서 너무 많은 공간을 차지하지 않습니다. ActiveAdmin의 필터에서 많은 영감을 받았습니다.
관리자 팀이 기본 검색 또는 필터 기능을 훌륭하게 수행했다는 데 동의합시다. 이미 여러 검색 필드와 관계형 테이블 검색을 지원합니다. 사용자 정의가 쉽습니다(예: 검색 활성화/비활성화, 사용자 정의 검색 필드 정의 등).
하지만 제가 발견한 몇 가지 단점이 있습니다.
registration_status
및 employment_status
가 있고 "활성" 등록 상태만 검색하려는 경우 고용 상태를 포함한 모든 "활성" 레코드를 가져옵니다.다른 이유가 있다면 의견을 공유해주세요.
Gemfile에 administrate_filterable
추가하세요.
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
에 파일을 생성해야 합니다. 그런 다음 여기에 기본 템플릿의 콘텐츠를 복사하여 붙여넣고 필요에 맞게 수정하세요.
자산 파이프라인을 사용하는 경우 app/assets/config/manifest.js
파일에 이 gem의 자산을 포함해야 합니다.
// ... 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
부분을 사용하기 때문에 모델 대시보드에서 검색 가능한 모든 속성을 false로 설정하면 표시되지 않을 수 있습니다. 따라서 필터 버튼이 표시되도록 하려면 검색 가능한 속성이 하나 이상 있는지 확인하세요.
내가 부분을 사용하는 이유는 다음과 같습니다.
_index_header.html.erb
부분을 사용했는데 adminstrate_exportable의 내보내기 버튼과 충돌합니다. 두 보석을 모두 사용하면 부분 재정의로 인해 버튼 하나가 누락됩니다. 이 보석을 더 좋게 만들기 위해서는 아직 해야 할 일이 많습니다. 다음은 그 중 일부입니다(가장 높은 우선순위부터 정렬).
belongs_to
필터 등) prompt
옵션 추가, include_blank
옵션 추가 등) scoped_resource
메서드를 재정의합니다) scoped_resource
메서드에서 인스턴스 변수를 사용합니다) 아이디어나 제안 사항이 있으면 문제를 생성하거나 끌어오기 요청을 통해 알려주시기 바랍니다.
이 프로젝트에 기여함으로써 이 보석을 개선하는 데 도움을 줄 수 있습니다. 어떤 도움이라도 높이 평가됩니다.
bundle exec rspec
MIT 라이센스
이 gem을 만드는 데 많은 도움을 준 다음 리소스에 진심으로 감사드립니다.