我定义了一个具有经典角色的用户模型
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 将显示“ strong>”字(法语为 Chercher )。 我该如何解决这个问题?
感谢您的帮助。
答案 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!