0

我有一个用户模型,它在数据库中包含 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,但不知道如何填充列表。

4

2 回答 2

2

Rails f.select 中所述,试图禁用下拉列表被更改,你不需要options_for_select. 如果你删除它并传递第四个参数一个selected选项,你应该被设置。

<%= f.select :permission, [['admin', 'Admin'], ['readonly', 'Read Only'], ['editable', 'Editable']], { selected: 'readonly' }, { disabled: @permissions_disabled } %>

但是给定上面的代码,即使没有selected选项,只要 f.object.permission 返回正确的值,你应该没问题。

于 2013-03-11T06:55:12.800 回答
0

尝试将此添加到您的最后一个选项哈希中::selected => @user.permission

例如:

<%= f.select :permission, options_for_select([['Admin', 'admin'], ['Read Only', 'readonly'], ['Editable', 'editable']], {:disabled => @permissions_disabled, :selected => @user.permission}) %>
于 2013-03-11T06:49:37.180 回答