インデックス ページにカスタム フィルターを追加する管理プラグイン。フィルターはキャンバス外のコンポーネントとしてレンダリングされるため、インデックス ページ上で多くのスペースを占有することはありません。 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
パーシャルを使用してフィルター ボタンを追加しているため、モデル ダッシュボードですべての検索可能な属性を false にするとフィルター ボタンが表示されなくなる可能性があります。したがって、フィルター ボタンを表示するには、検索可能な属性が少なくとも 1 つあることを確認してください。
私がパーシャルを使用する理由は次のとおりです。
_index_header.html.erb
部分を使用していましたが、administrate_exportable のエクスポート ボタンと競合します。両方の gem を使用すると、部分的なオーバーライドにより 1 つのボタンが失われます。 この宝石をより良くするためにやるべきことはまだたくさんあります。以下にその一部を示します (優先度の高い順に並べています)。
belongs_to
関連付けによるフィルターなど) prompt
オプションの追加、 include_blank
オプションの追加など)。 scoped_resource
メソッドをオーバーライドしている) scoped_resource
メソッドでインスタンス変数を使用しています)。 アイデアや提案がある場合は、問題またはプルリクエストを作成してお知らせください。
このプロジェクトに貢献することで、この gem の改善に協力していただけます。ご協力をよろしくお願いいたします。
bundle exec rspec
MITライセンス
この gem の作成に大いに役立った次のリソースに感謝します。