Rails通过用户表单添加rolify角色

时间:2012-05-04 16:12:37

标签: ruby ruby-on-rails-3 devise cancan

我正在创建一个基于Devise,CanCan和Rolify的应用程序来处理私人资源。

设计注册已被禁用,因为我不想让用户注册,而我正在创建一个管理界面来添加/编辑用户。

现在我正在处理用户角色。我想允许管理员使用相同的表单创建用户并设置他们的角色。我不知道使用rolify有什么样的关系,因为我对rails很新,Ruby和rolify添加了rolify方法而不是更清晰的关系。

我目前需要并希望每个用户只有一个角色。因此,如果有人编辑用户更改角色,我会删除所有@user.roles,然后设置新的角色。

我目前正在使用简单的黑客工作。 我已经在表单中添加了一个选择字段,使用Role的集合来提供一系列角色。然后在createupdate方法中,我正在执行此操作:

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方法。这也产生了另一个问题,因为我必须检索当前角色以允许更新视图为select设置正确的默认值(除了最重要的事实,我不知道如何验证ONE角色的存在)。

这将是一个太污垢的解决方案,所以我想有一些观点,也许有一些建议如何做到这一点。我整天都在努力: - (

如果您需要一些信息,请问我。

P.S。我正在观看有关嵌套资源的截屏视频,但在数据库中我可能会看到它正在使用第三个表来跟踪users_roles并且我不了解如何执行此操作。 谢谢!

1 个答案:

答案 0 :(得分:2)

最后我更愿意放弃Rolify。 对我来说花了太多时间,我意识到我需要一个更简单的解决方案,所以我现在在我的模型中使用一个新列来描述用户,我还实现了一个类似于has_role的方法?与CanCan保持兼容。

这解决了很多问题,这是一个更常见的解决方案(=更容易帮助)。

根据我的经验,我注意到如果没有人在30分钟内回答你的问题,那么你做得太复杂了。

谢谢大家。