5 ruby devise cancan ruby-on-rails-3
我正在创建一个基于Devise,CanCan和Rolify的应用程序来处理私有资源.
设计注册已被禁用,因为我不希望允许用户注册,而我正在创建一个管理界面来添加/编辑用户.
现在我正在处理用户角色.我想允许管理员使用相同的表单创建用户并设置他们的角色.我不知道使用rolify是什么样的关系,因为我对rails很新,Ruby和rolify添加了rolify方法而不是更清晰的关系.
我目前需要并希望每个用户只有一个角色.因此,如果有人编辑用户更改角色,我将全部删除@user.roles,然后设置新角色.
我目前正在使用一个简单的黑客工作.我已经在表单中添加了一个选择字段,使用一组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
Run Code Online (Sandbox Code Playgroud)
您可能已经看到我没有Role直接与模型交互,而是使用提供的add_role方法.这也产生了另一个问题,因为我必须检索当前角色以允许更新视图为select设置正确的默认值(除了最重要的事实,我不知道如何验证ONE角色的存在).
这将是一个太污垢的解决方案,所以我想有一些观点,也许有一些建议如何做到这一点.我花了一整天的工作:-(
如果您需要一些信息,请问我.
PS我正在观看有关嵌套资源的截屏视频,但在DB中我可能会看到它正在使用第三个表来跟踪,users_roles我不知道如何去做.谢谢!!
小智 2
最后我选择放弃 Rolify。这对我来说花了太多时间,我意识到我需要一个更简单的解决方案,所以我现在在模型中使用一个新列来描述用户,并且我还实现了一个类似于 has_role? 的方法。以保持与 CanCan 的兼容性。
这解决了很多问题,并且是更常见的解决方案(=更容易的帮助)。
根据我的经验,我注意到如果 30 分钟内没有人回答你的问题,那么你做得太复杂了。
谢谢大家。