RailsAdmin 枚举显示记录的现有值

RailsAdmin enum display existing value of the record

我定义了一个用户模型,其中有一个经典角色

class User
enum role:[:user, :poweruser, :admin, :superadmin]

我现在使用 RailsAdmin 来管理 rails_admin.rb 文件中的用户字段。 一开始,我是这样直接管理角色属性的:

edit do
field :email do
  required true
end
field :password 
field :password_confirmation 
field :role 
...

一切都很好。显示当前值(此处 poweruser),我从 RailsAdmin 自动获得一个组合,其中列出了 4 个值。完美!

现在,我想动态管理角色列表:我需要限制有关 current_user 记录的角色列表。 因此,我像那样使用 RailsAdmin 的 :enum 功能:

field :role, :enum do
          required true
          enum do
            if bindings[:view]._current_user.superadmin?
              {user:0, poweruser:1,admin:2,superadmin:3}
            elsif  bindings[:view]._current_user.admin?
              {user:0, poweruser:1,admin:2}
            else
              {user:0}
            end
          end
      end

这是有效的,根据登录的当前用户角色正确地限制了列表。

但是,我希望角色的初始值应该正确设置,这个值根本不显示:而不是初始值 poweruser,'Search' 单词(Chercher 法语)显示。 我该如何解决这个问题?

感谢您的帮助。

您需要定义区块default_value

  rails_admin do
    edit do
      field :role do
        default_value do
          :poweruser
        end
      end
    end
  end

谢谢 Guillermo,但它没有解决我的问题。 问题是 railsadmin 无法 select 编辑枚举字段。它与新记录的默认值无关。

现在,我发现它是 railsadmin gem 的未解决问题,并找到了这个 link: Not selecting enum field on edit #2669 and got a workaround from Richard Venneman

我必须更改 文件 app/views/rails_admin/main/_form_enumeration.html.haml 中的代码并通过 :

覆盖现有代码
= form.select field.method_name, field.enum, { include_blank: true }.reverse_merge({ selected: form.object.class.send(field.method_name.to_s.pluralize)[field.form_value] }), field.html_attributes.reverse_merge({ data: { enumeration: true }, placeholder: t('admin.misc.search') })

现在工作正常!所以这个问题对我来说已经关闭,直到 railsadmin 的正式版本!