これはかなり単純なはずですが、この件に関するドキュメントを見つけることができませんでした。
次のフィルターがあります。
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
私は同じ問題を抱えていましたが、インデックスフィルターとフォーム入力でカスタム選択が必要なので、同様の解決策を見つけました: app/inputs (suggest formtastic など) で、2 つのクラスを作成します。
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
「クリーン」でも「エレガント」でもありませんが、十分に機能します:)