我有一个用户模型,它在数据库中包含 2 个布尔值 - 管理员和只读。基本上,这允许我拥有 3 级访问权限(只读、可编辑和管理员)。
我有一个允许管理员编辑其他用户权限的屏幕。我没有为 admin 和 readonly 的布尔值设置 2 个复选框,而是使用 f.select 创建了一个下拉列表,并创建了一个名为“permission”的虚拟属性。
就权限而言,保存用户时一切正常,唯一的是,当您转到特定用户的编辑页面时,它不会在下拉菜单中加载具有用户实际权限的页面。它只是将下拉列表中的第一个值加载为默认值。
我怎样才能使它在第一次加载用户编辑页面时显示用户的实际权限?
这是我的用户模型的虚拟属性代码:
# get the permission
def permission
if self.read_only
@permission = 'readonly'
elsif self.admin
@permission = 'admin'
else
@permission = 'editable'
end
end
# Set the permission.
def permission=(value)
p "VALUE = #{value}"
if value == 'readonly'
self.read_only = true
self.admin = false
@permission = 'readonly'
elsif value == 'admin'
p "INSIDE admin"
self.read_only = false
p "before #{self.admin}"
self.admin = true
p "after #{self.admin}"
@permission = 'admin'
elsif value == 'editable'
self.read_only = false
self.admin = false
@permission = 'editable'
end
end
这是我的表单视图中的 f.select:
<%= f.select :permission, options_for_select([['Admin', 'admin'], ['Read Only', 'readonly'], ['Editable', 'editable']], {:disabled => @permissions_disabled}) %>
我尝试使用 collection_select,但不知道如何填充列表。