Имена коллекции ActiveAdmin - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть массив ролей в моей модели:

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

но это сохраняет роль гуманизированной заглавной формы вместо формы змеиного падежа.Как я могу использовать гуманизированную, заглавную версию слов в форме, но сохранить версию случая змеи?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Если вы хотите использовать чистый 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"]]

Backward (before_save):

"Super Admin".downcase.gsub(' ', '_') #=> "super_admin"
0 голосов
/ 27 ноября 2018

Вы можете использовать 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]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...