如何在ActiveAdmin中更改枚举标签

时间:2018-08-08 00:37:10

标签: ruby-on-rails activeadmin

我正在使用Active Admin插件gem为我的枚举创建漂亮的标签。 https://github.com/platanus/activeadmin_addons

在Order模型中,我有:

enum status: %i[pending not_started in_progress completed]

在ActiveAdmin模型中,我有:

tag_column(:status, class: :colored_status)

但是,我仍然找不到将状态翻译成其他语言的方法。我对此感到非常困惑,以至于解决方案甚至不必涉及语言环境。我只想将标签标签更改为其他内容。

我发现我可以执行以下操作来更改标签的文本,但现在样式消失了:

tag_column(:status, class: :status) do |delivery|
  I18n.t("activerecord.enums.delivery.statuses.#{delivery.status}")
end

这种方法也不是最好的方法,因为我必须在应用程序中的任何位置进行翻译。

1 个答案:

答案 0 :(得分:1)

我知道为时已晚,但在这些情况下我所做的是使用 draper 装饰器来转换枚举选项。所以我的管理文件看起来像这样:

ActiveAdmin.register Car do
  decorate_with CarDecorator

  index do
    tag_column :human_status
  end
end

在装饰器中,我将 human_status 定义如下:

class CarDecorator < Draper::Decorator
  delegate_all

  def human_status
    I18n.t(status, scope: 'activerecord.attributes.car.statuses')
  end
end

此外,在翻译的 yml 中(在我的情况下为 es.yml),您需要将状态添加为 statuses 下的条目:

es:
  activerecord:
    attributes:
      car:
        statuses:
          approved: Aprobado
          declined: Rechazado
          pending: Pendiente

这样,该列使用新的 :human_status 而不是已翻译的 :status

您可以跳过装饰器并直接在模型中实现该方法,但在我看来,装饰器是可行的方法,因为否则模型将获得许多不属于那里的与表示相关的逻辑。

现在,关于颜色问题,在 ActiveAdmin Addons 中,标记列自动使用两个 css 类呈现,status_tag 一个和每个值一个为 <option>(例如 status_tag approved) .显示了一个示例 here,因此您可以自定义这些类以获得所需的颜色。但是,使用 tag_column(:human_status, class: :colored_status) 它也应该可以工作。