【发布时间】:2012-05-04 16:12:37
【问题描述】:
我正在创建一个基于 Devise、CanCan 和 Rolify 的应用程序来处理私有资源。
设计注册已被禁用,因为我不想让用户注册,同时我正在创建一个管理界面来添加/编辑用户。
现在我正在处理用户角色。我想允许管理员创建用户并使用相同的表单设置他们的角色。我不知道使用 rolify 是什么样的关系,因为我对 rails 和 Ruby 还很陌生,并且 rolify 添加了 rolify 方法而不是更清晰的关系。
我目前需要并且希望每个用户只有一个角色。因此,如果有人编辑用户更改角色,我会删除所有@user.roles,然后设置新的。
我目前正在使用一个简单的 hack 让它工作。
我在表单中添加了一个选择字段,使用Roles 的集合来提供角色选择。然后在create 和update 方法中我正在这样做:
role = params[:user][:role]
params[:user].delete :role
@user = User.new(params[:user])
respond_to do |format|
if @user.save # update_attributes inside update
@user.add_role role
# ...
end
end
如您所见,我没有直接与Role 模型交互,而是使用提供的add_role 方法。这也产生了另一个问题,因为我必须检索当前角色以允许更新视图为选择设置正确的默认值(最重要的事实是我不知道如何验证 ONE 角色的存在)。
这将是一个过于肮脏的解决方案,所以我想提出一些观点,也许就如何做到这一点提出一些建议。我整天都在做这个:-(
如果您需要一些信息,请询问我。
附:我正在观看有关嵌套资源的截屏视频,但在数据库中,我可能会看到它正在使用第三个表来跟踪 users_roles,而我不明白该怎么做。
谢谢!!
【问题讨论】:
标签: ruby ruby-on-rails-3 devise cancan