我正在使用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
这种方法也不是最好的方法,因为我必须在应用程序中的任何位置进行翻译。
答案 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)
它也应该可以工作。