修改使用enum时simple_form输入中显示的文本



我使用simple_form管理我的用户。为了选择用户角色,我使用input::radio_button。

集合来自用户模型上的枚举。我如何修改文本,以显示一些具体的东西,如"超级管理员"而不是super_admin?

_form.html.slim

= form.input :role, collection: User.roles, as: :radio_buttons, item_wrapper_class: 'btn btn-default', checked: User.roles[user.role], required: true

user.rb

  enum role: [:super_admin, :admin, :generic]

您可以将label_method选项用于集合

= form.input :role, collection: User.roles, label_method: lambda {|k| k.humanize}, as: :radio_buttons, item_wrapper_class: 'btn btn-default', checked: User.roles[user.role], required: true

如果您想做一些比在键上调用方法更复杂的事情,Simple Form支持使用I18n转换集合选项-您只需提供集合作为查找工作的符号数组。

下面是我在SimpleForm 3.5.0上的工作:

Locale文件:

en:
  simple_form:
    options:
      user:
        role:
          super_admin: 'Super Admin'
          admin: 'Admin'
          generic: 'Regular Joe'

视图:

<%= f.input :role, collection: User.roles.symbolize_keys.keys %>

最新更新