这似乎应该相当简单,购买我一直无法找到有关该主题的任何文档。
我有以下过滤器:
filter :archived, as: :select
...它以选择框的形式为我提供了一个工作过滤器,其中包含“任何”、“是”和“否”选项。
我的问题是:如何自定义这些标签以使功能保持不变,但标签是“全部”、“实时”和“存档”?
这似乎应该相当简单,购买我一直无法找到有关该主题的任何文档。
我有以下过滤器:
filter :archived, as: :select
...它以选择框的形式为我提供了一个工作过滤器,其中包含“任何”、“是”和“否”选项。
我的问题是:如何自定义这些标签以使功能保持不变,但标签是“全部”、“实时”和“存档”?
快速简便:
filter :archived, as: :select, collection: [['Live', 'true'], ['Archived', 'false']]
但是,这不会让您在不更改 I18n 的情况下自定义“全部”选项。
更新:这是另一种选择:
# Somewhere, in an initializer or just straight in your activeadmin file:
class ActiveAdmin::Inputs::FilterIsArchivedInput < ActiveAdmin::Inputs::FilterSelectInput
def input_options
super.merge include_blank: 'All'
end
def collection
[ ['Live', 'true'], ['Archived', 'false'] ]
end
end
# In activeadmin
filter :archived, as: :is_archived
我有同样的问题,但我需要在索引过滤器和表单输入中自定义选择,所以我找到了一个类似的解决方案:在应用程序/输入中(如建议 formtastic)我创建了两个类:
在 app/inputs/country_select_input.rb 中:
class CountrySelectInput < Formtastic::Inputs::SelectInput
def collection
I18nCountrySelect::Countries::COUNTRY_CODES.map { |country_code|
translation = I18n.t(country_code, scope: :countries, default: 'missing')
translation == 'missing' ? nil : [translation, country_code]
}.compact.sort
end
end
在 app/inputs/filter_country_select_input.rb 中:
class FilterCountrySelectInput < ActiveAdmin::Inputs::FilterSelectInput
def collection
I18nCountrySelect::Countries::COUNTRY_CODES.map { |country_code|
translation = I18n.t(country_code, scope: :countries, default: 'missing')
translation == 'missing' ? nil : [translation, country_code]
}.compact.sort
end
end
在我的 app/admin/city.rb 中:
ActiveAdmin.register City do
index do
column :name
column :country_code, sortable: :country_code do |city|
I18n.t(city.country_code, scope: :countries)
end
column :created_at
column :updated_at
default_actions
end
filter :name
filter :country_code, as: :country_select
filter :created_at
form do |f|
f.inputs do
f.input :name
f.input :country_code, as: :country_select
end
f.actions
end
end
如您所见,ActiveAdmin 在不同的上下文、索引过滤器或表单输入中查找 Filter[:your_custom_name:]Input 和 [:your_custom_name:]Input。因此,您可以创建此类扩展 ActiveAdmin::Inputs::FilterSelectInput 或 Formtastic::Inputs::SelectInput 并自定义您的逻辑。
它对我有用,我希望你能发现它有用
这是一个有效的技巧......无需您编写新的输入控件!
filter :archived, as: :select, collection: -> { [['Yes', 'true'], ['No', 'false']] }
index do
script do
"""
$(function () {
$('select[name=\"q[archived]\"] option[value=\"\"]').text('All');
});
""".html_safe
end
column :id
column :something
end
它既不“干净”也不“优雅”,但效果很好:)