我有一个用户模型,其中包含2个布尔值在数据库中 - 管理员和只读。基本上这允许我有3个访问级别(只读,可编辑和管理员)。Rails如何使用虚拟属性f.select
我有一个屏幕,允许管理员编辑其他用户的权限。我使用f.select创建了一个下拉列表,并且创建了一个名为“permission”的虚拟属性,而不是有2个复选框用于布尔值admin和readonly。
当保存用户权限时,一切都可以正常工作,唯一的问题是,当您转到某个用户的编辑页面时,它不会在下拉列表中以用户的实际权限加载该页面。它只是加载下拉中的第一个值作为默认值。
我该如何做到这一点,所以当第一次加载用户编辑页面时,此下拉菜单显示用户的实际权限?
这里是我的虚拟属性代码为我的用户模型:
# 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,但无法弄清楚如何填充列表。
啊是的,删除'options_for_select'它有页面加载时的选定值。 – Catfish 2013-03-11 13:14:58