我正在尝试以下列格式返回用户拥有的所有角色的名称:
'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')
我确定我错过了很简单的事情。
答案 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(", ")