RailsAdmin枚举显示记录的现有值

时间:2019-01-28 18:11:45

标签: ruby-on-rails enums devise roles rails-admin

我定义了一个具有经典角色的用户模型

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个值的组合。完美!

enter image description here

现在,我想动态管理角色列表:我需要限制与记录的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

这可以正常工作,根据记录的当前用户角色正确限制了列表。

enter image description here

但是,我希望正确设置角色的初始值,而根本不显示该值:代替 poweruser 的初始值,而是使用 Search 将显示“ strong>”字(法语为 Chercher )。 我该如何解决这个问题?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您需要定义块default_value

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

答案 1 :(得分:0)

感谢吉列尔莫,但它不能解决我的问题。 问题是railsadmin无法在编辑时选择枚举字段。它与新记录的默认值无关。

现在,我发现这是railsadmin gem的未解决问题,并找到此链接: Not selecting enum field on edit #2669,并从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!