Ruby on rails 将活动管理中的布尔值显示为';是';和';否';

Ruby on rails 将活动管理中的布尔值显示为';是';和';否';,ruby-on-rails,internationalization,activeadmin,Ruby On Rails,Internationalization,Activeadmin,如何使active admin显示“是”和“否”,而不是“真”和“假” 我试着改变英语的语言环境,但那不起作用。 我正在考虑修补布尔类,但这看起来很难看 还有什么我可以做的吗?在这里,这是可行的,它给你一个勾号和叉号,但似乎很容易修改 您需要重新启动rails服务器才能使其工作,因为它修改了活动的_admin.rb初始化器 当然,它创建了一个类,这是您想要避免的,但在没有其他任何东西的情况下,这确实有效。正如Ahmad所说,您希望避免仅为此创建类 因此,还有另一个解决方案: 在活动的_admi

如何使active admin显示“是”和“否”,而不是“真”和“假”

我试着改变英语的语言环境,但那不起作用。 我正在考虑修补布尔类,但这看起来很难看


还有什么我可以做的吗?

在这里,这是可行的,它给你一个勾号和叉号,但似乎很容易修改

您需要重新启动rails服务器才能使其工作,因为它修改了活动的_admin.rb初始化器


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

正如Ahmad所说,您希望避免仅为此创建类

因此,还有另一个解决方案:

在活动的_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就会在您的区域设置文件中搜索正确的翻译,并将“true/false”替换为“Yes/No”

我认为这是一个更好的解决方案,您遵循“Rails精神”,使用不同的语言创建一个活动的管理面板变得更容易

缺点(因为总有一个)是每次你想用Yes/No替换boolean时都需要使用“t”函数

向活动的_admin gem发出一个pull请求将是一件非常棒的事情,它提供了一种只需像我一样更改yml文件就可以替换布尔值的可能性


但是。。。在完成之前,我的解决方案工作正常。:)

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

column :column_name do|object|
    object.column_name? ? 'Yes' : 'No'
end
很简单,

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

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

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

使用状态作为活动管理显示或索引中的正常字段。

您可能需要执行以下操作:

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

这将把“是”和“否”这两个词包装在状态标签中,看起来相当不错。

如果一个额外的依赖项不困扰您,请查看哪个自动执行该功能并支持i18n。

我认为这也可以,无需再进行任何修补

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

不知道为什么这还没有被提升,似乎是最简单的解决方案。按照你的例子我做了:
专栏:美国公民,Proc.new{{{obj{obj}美国公民??“是的”:“否”}
谢谢斯科特,它们看起来不错,不是吗。您也可以使用:红色、绿色或:灰色来指定颜色。将其修改为t(“是”),i18n也可以:)@HugoLogmans,即使我尝试使用
t(“是”)
i18n。translate(“是”)
我一直得到
translation missing
。。。我重新启动了服务器,一切。。。有什么想法吗?这是一个新问题,请以新问题的形式发布。但首先谷歌一下,I18n问题的解决方案可以在这里找到:简言之,确保在yml文件中用双引号将密钥括起来,“是”和“否”。