【问题标题】:ActiveAdmin Collection NamesActiveAdmin 集合名称
【发布时间】:2018-11-27 05:01:14
【问题描述】:

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

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(' ') }

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

【问题讨论】:

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


    【解决方案1】:

    您可以使用 Rails(Active Support) 方法 String#titleize 代替 split.map(&:capitalize).join(' ')

    如果你想在 DB 中存储记录为snakecase,你可以通过以下方式:在下拉选项中,它将显示为titalize,但它的值将设置为snakecase,它将存储在 DB 中。

    > 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]}
    

    【讨论】:

      【解决方案2】:

      如果您想使用纯 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"
      

      【讨论】:

        猜你喜欢
        • 2012-01-17
        • 2017-12-06
        • 1970-01-01
        • 1970-01-01
        • 2011-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-02
        相关资源
        最近更新 更多