我的模型中有一系列角色:
ROLES = ['super_admin', 'user', 'user_admin']
我有一个 ActiveAdmin 表单,其中显示了这些角色:
input :roles, as: :check_boxes, collection: User::ROLES
我必须在表单上将角色显示为人性化、大写的名称,而不是蛇形名称:
Super Admin, Salesman, Sales Admin
但是当选择其中之一时,它必须保存在蛇形盒中。
我已经尝试过这个:
User::ROLES
.map { |r| "#{r.humanize}" }
.map { |r| r.split.map(&:capitalize).join(' ') }
但这会将角色保存为人性化的大写形式,而不是蛇形形式。如何在表单上使用人性化的大写字母版本,但保存蛇形字母版本?
最佳答案
您可以使用Rails(Active Support)方法String#titleize 而是 split.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]}
关于ruby - ActiveAdmin 集合名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53493029/