一个管理插件,用于将自定义过滤器添加到索引页。该过滤器将呈现为画布外组件,因此它不会在索引页上占用太多空间。深受 ActiveAdmin 过滤器的启发。
我们一致认为,管理团队在默认搜索或过滤功能方面做得非常出色。它已经支持多个搜索字段和关系表搜索。它很容易自定义(例如启用/禁用搜索、定义自定义搜索字段等)。
但我发现有一些缺点:
registration_status
和employment_status
,并且您只想搜索“active”注册状态,您将获得所有“active”记录,包括就业状态。如果您还有其他原因,请分享您的想法。
将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
中创建文件。然后只需将默认模板中的内容复制并粘贴到此处并进行修改以满足您的需要。
如果您使用资产管道,则需要在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
部分,但它与 administrate_exportable 中的导出按钮冲突。由于部分覆盖,使用这两个宝石会导致缺少一个按钮。 要让这颗宝石变得更好,还有很多事情要做。以下是其中的一些(按优先级最高的顺序排列):
belongs_to
关联进行过滤等) prompt
选项、添加include_blank
选项等) scoped_resource
方法) scoped_resource
方法中使用实例变量) 如果您有任何想法或建议,请通过创建问题或拉取请求让我知道。
您可以通过为这个项目做出贡献来帮助我改进这个 gem。非常感谢任何帮助。
bundle exec rspec
麻省理工学院许可证
非常感谢以下资源在创建这个宝石时为我提供了很多帮助: