我正在使用CRUD界面来管理我的应用程序中的用户。我有一个常数User :: ROLES,它是一个在我的应用程序中具有有效用户角色名称的数组(管理员,教师,学生)。使用块命名和创建实例变量[Ruby-on-Rails]
我想要做的是,在控制器的索引操作中,有一个块遍历ROLES常量,并从@users(已经在块之前初始化)创建一个范围实例变量。下面是该指数方法貌似至今:
def index
@users = user.all
#@students = @users.where(:role => "student") # This works by itself
User::ROLES.each do |r|
@r = @users.where(:role => r.to_s)
end
end
所以我希望能够通过命名什么的通过块传递的实例变量,所以@r创建@admin,@teacher等。由于我新的红宝石和铁轨,我不太明白这样做的语法。谁知道?反正可能有更好的方法。
编辑
只是为了让大家知道,我希望在视图中使用的索引操作显示由自己的角色进行分组的用户列表。当然,在整个CRUD界面中它也会以其他方式使用,这就是为什么我之前没有澄清用例,因为它是多用途的。
“如果你在你的模型中改变一个角色,你将需要更新您的视图中使用不同的实例方法”。现在你自相矛盾。如果您通过“@users [:admin]”访问特定角色,则必须以完全相同的方式调整视图,方法是更改角色名称。 – 2012-04-27 21:51:23
谢谢。我不知道组方法和each_pair。这有很大帮助。 – GorrillaMcD 2012-04-27 22:21:58
嗯,我不知道为什么,但组方法不起作用。它像正常一样返回用户记录,无需分组。我最终做了@users = User.all.group_by(&:role)',然后按预期工作。 – GorrillaMcD 2012-05-07 22:53:01