ActiveAdmin集合名称

时间:2018-11-27 05:01:14

标签: ruby ruby-on-rails-5 activeadmin

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

public class DBContaxt : DbContext
    {
        public DBContaxt(DbContextOptions<DBContaxt> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder mb)
        {
            base.OnModelCreating(mb);

            mb.Entity<User>().HasData(
                new User() { Email = "Mubeen@gmail.com", Name = "Mubeen", Password = "123123" },
                new User() { Email = "Tahir@gmail.com", Name = "Tahir", Password = "321321" },
                new User() { Email = "Cheema@gmail.com", Name = "Cheema", Password = "123321" }
                );
        }

        public DbSet<User> User { get; set; }
    }

我有一个显示以下角色的ActiveAdmin表单:

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

我必须在表格上显示人性化的大写字母名称而不是蛇形字母

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

但是选择其中之一时,必须将其保存在蛇形盒中。

我已经尝试过了:

Super Admin, Salesman, Sales Admin

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

2 个答案:

答案 0 :(得分:2)

您可以使用 Rails(有效支持)方法 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]}

答案 1 :(得分:0)

如果您想使用纯Ruby,可以选择以下一种方法:

'super_admin'.split('_').map(&:capitalize).join(' ')
#=> "Super Admin"

因此,映射您的数组:

roles.map { |str| [str.split('_').map(&:capitalize).join(' '), str] }
#=> [["Super Admin", "super_admin"], ["User", "user"], ["User Admin", "user_admin"]]

后退(before_save):

"Super Admin".downcase.gsub(' ', '_') #=> "super_admin"