如何使用rolify返回角色名称字符串

时间:2013-04-18 22:07:31

标签: ruby-on-rails-3.2 rolify

我正在尝试以下列格式返回用户拥有的所有角色的名称:

'rolename1', 'rolename2', 'rolename3'

这样我就可以使用has_all_roles了?来自rolify的方法。

我尝试过像这样收集角色名称:

user.roles(:select => :name).collect(&:name)

但是返回一个数组:

[ “rolename1”, “rolename2”, “rolename3”]

has_all_roles?方法希望他们这样:

user.has_all_roles?( 'rolename1', 'rolename2', 'rolename3')

我确定我错过了很简单的事情。

2 个答案:

答案 0 :(得分:4)

将collect的结果捕获到变量,并将捕获的数组转换为参数列表。

roles = user.roles(:select => :name).collect(&:name)
user.has_all_roles?(*roles)

答案 1 :(得分:0)

从Rails 5.1开始,方法user.roles(:select => :name)给您带来以下错误:

ArgumentError: wrong number of arguments (1 for 0)

要解决此问题,我们只需执行@user.roles.pluck(:name)

如果您要使用连接名逗号分隔的字符串,我们可以只@user.roles.pluck(:name).join(", ")