将Active Admin中的布尔值显示为“是”和“否”

时间:2012-04-26 08:02:45

标签: ruby-on-rails internationalization activeadmin

如何让主动管理员显示“是”和“否”而不是“真”和“假”。

我尝试更改英语语言环境,但这不起作用。 我正在考虑monkeypatching布尔类,但这看起来很难看。

我还能做些什么吗?

7 个答案:

答案 0 :(得分:52)

您可能喜欢这样做:

index do
  id_column
  column(:published) do |story| 
    story.published? ? status_tag( "yes", :ok ) : status_tag( "no" )
  end
end

这将在状态标签中包含“是”和“否”字样,看起来相当不错。

答案 1 :(得分:15)

尝试直接在活动管理中使用条件,如下所示

column :column_name do|object|
    object.column_name? ? 'Yes' : 'No'
end

答案 2 :(得分:9)

在这里,这有效,它会给你一个勾选和交叉,但似乎很容易修改。

https://gist.github.com/2574969

您需要重新启动rails服务器才能使其正常工作,因为它会修改active_admin.rb初始化程序。

当然它会创建一个类,这是你想要避免的,但在没有任何其他的情况下,这确实有效。

答案 3 :(得分:3)

非常简单,

假设您的布尔字段名称处于活动状态,

创建一个名为status的方法,如

def status
  self.active ? "Yes" : "No"
end

状态用作有效管理员展示或索引中的常规字段。

答案 4 :(得分:2)

正如艾哈迈德所说,你想避免为此创建课程。

所以还有另一个解决方案:

在您的active_admin.en.yml语言环境(或其他)中,只需添加以下两行:

en:
  "true": Yes
  "false": No

然后在你的app / admin / my_model.rb文件中,例如在索引页面上显示是/否,只需执行以下操作:

column :published do |post|
      t(post.published.to_s)
end

所以你只需要转换为你的布尔字符串并使用“t”函数(i18n转换),这样Rails会在你的locales文件中搜索正确的翻译,并用'Yes / No'替换'true / false'。

我认为这是一个更好的解决方案,您遵循“Rails精神”,并且使用不同语言的active_admin面板变得更加容易。

缺点(因为总有一个),每次你想要用是/否替换布尔值时你需要使用“t”函数。

向active_admin gem提出拉取请求会很好,只需像我一样更改yml文件就可以替换布尔值。

但是......直到它完成了,我的解决方案运行正常。 :)

答案 5 :(得分:1)

我认为这也可以,而不再修补猴子。

对于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

答案 6 :(得分:0)

如果额外的依赖不会给您带来麻烦,请查看https://github.com/parabuzzle/humanize_boolean自动执行该功能并支持i18n。