首页 > 解决方案 > ActiveAdmin 集合名称

问题描述

我的模型中有一系列角色:

ROLES = ['super_admin', 'user', 'user_admin']

我有一个显示这些角色的 ActiveAdmin 表单:

input :roles, as: :check_boxes, collection: User::ROLES

我必须在表格上将角色显示为人性化的大写名称而不是蛇形:

Super Admin, Salesman, Sales Admin

but when one of them is selected, it has to be saved in snakecase.

我试过这个:

User::ROLES
.map { |r| "#{r.humanize}" }
.map { |r| r.split.map(&:capitalize).join(' ') }

但这将角色保存为人性化的大写形式,而不是蛇形形式。我如何使用表格上单词的人性化,大写版本,但保存蛇案例版本?

标签: rubyruby-on-rails-5activeadmin

解决方案


您可以改用Rails (Active Support)方法String#titleizesplit.map(&:capitalize).join(' ')

如果您想按照snakecase以下方式将记录存储在数据库中:在下拉选项中,它将显示为,titalize但其值将设置为snakecase将存储在数据库中的值。

> roles.map{|e|[e.titleize, e]}
#=> [["Super Admin", "super_admin"], ["User", "user"], ["User Admin", "user_admin"]]

在 activeadmin 中使用:

input :roles, as: :check_boxes, collection: User::ROLES.map{|e|[e.titleize, e]}

推荐阅读