Показывать булевы в Active Admin как "Да" и "Нет"
Как заставить активного администратора показывать "Да" и "Нет" вместо "истинных" и "ложных".
Я попытался изменить язык, но это не работает.
Я думаю о monkeypatching boolean classes, но это кажется довольно уродливым.
Есть ли что-нибудь еще, что я могу сделать?
Ответы
Ответ 1
Здесь это работает, оно дает вам тик и крест, но, кажется, легко изменить.
https://gist.github.com/2574969
Для этого вам необходимо перезапустить сервер рельсов, так как он изменяет инициализатор active_admin.rb.
Конечно, он создает класс, которого вы хотите избежать, но в отсутствие чего-то еще это работает.
Ответ 2
Вам может понравиться сделать что-то вроде этого:
index do
id_column
column(:published) do |story|
story.published? ? status_tag( "yes", :ok ) : status_tag( "no" )
end
end
Это обернет слова "да" и "нет" в тегах статуса, которые выглядят довольно хорошо.
Ответ 3
Попробуйте использовать условие непосредственно в активном админе, как показано ниже.
column :column_name do|object|
object.column_name? ? 'Yes' : 'No'
end
Ответ 4
Его очень просто,
Предположим, что ваше имя логического поля активно,
создать метод с именем status, например
def status
self.active ? "Yes" : "No"
end
Используйте статус как нормальное поле в активном показе или индексе admin.
Ответ 5
Как сказал Ахмад, вы хотите избежать создания классов именно для этого.
Итак, есть другое решение:
В вашем локальном каталоге active_admin.en.yml(или что-то еще) просто добавьте эти две строки:
en:
"true": Yes
"false": No
Затем в вашем файле app/admin/my_model.rb, например, чтобы отобразить Yes/No на индексной странице, просто выполните следующее:
column :published do |post|
t(post.published.to_s)
end
Итак, вам просто нужно обратиться к строковой логике и использовать функцию "t" (перевод i18n), поэтому Rails будет искать в вашем файле локалей правильный перевод и заменить "true/false" на "Yes/No".
Я думаю, что это лучшее решение, вы следуете "Rails Spirit", и становится легче иметь панель active_admin на разных языках.
Недостаток (потому что всегда есть один), что вам нужно будет использовать функцию "t" каждый раз, когда вы хотите заменить boolean на Yes/No...
Было бы здорово сделать запрос на вытягивание к камню active_admin, предлагая возможность заменить booleans, просто изменив файл yml, как я.
Но... пока это не будет сделано, мое решение работает нормально.:)
Ответ 6
Если дополнительная зависимость вас не беспокоит, проверьте https://github.com/parabuzzle/humanize_boolean, который автоматизирует эту функцию и поддерживает i18n.
Ответ 7
Я думаю, что это тоже может пойти, без каких-либо патчей обезьян.
Для Rails 5.
column :signed_up?, sortable: 'signed_up' do |interest|
ActiveRecord::Type::Boolean::FALSE_VALUES.exclude?(interest.signed_up)
end
Для Rails 4.
column :signed_up?, sortable: 'signed_up' do |interest|
ActiveRecord::Type::Boolean::TRUE_VALUES.include?(interest.signed_up)
end
column :signed_up?, sortable: 'signed_up' do |interest|
ActiveRecord::Type::Boolean::FALSE_VALUES.exclude?(interest.signed_up)
end