Показывать булевы в 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