1

我有一个函数 users_by_role

它以以下格式返回数据,

[
  [#<Role id: 1, name: "Developer">,[#<User id:1, name: "Abc">,#<User id:2, name: "xyz">]]
  [#<Role id: 2, name: "Tester">,[#<User id:11, name: "Abcd">,#<User id:12, name: "wxyz">]]
]

现在,我想为给定的角色选择用户

我在用,

project.users_by_role.select{|o| o.first.name == "Developer"}

其中 project 是一个 Project 对象

一切都好,代码返回给我数据,但随之而来的是我收到以下警告

警告:块参数的多个值(2 比 1)

我也在寻找优化和更短的方法来做到这一点

完整的代码片段如下所示:

project.users_by_role.select{|o| o.first.name == "Developer" }.collect{|e| e.last.map{|f| [f.id,f.firstname + ' ' + f.lastname]}}.flatten(1).uniq

通过上面的代码,我想获取给定角色的所有用户名。

4

1 回答 1

1

警告:它说您期望 1 个 argt,它通过了 2。那是因为它“扩展了 argts”以考虑 2 个元素数组。

project.users_by_role.select {|role, users| role.name == "Developer"}

为了更好的方式:

如果角色在返回的#users_by_role 数据中是唯一的,则可以避免映射。

users = project.users_by_role.select {|role, users| role.name == "Developer"}.first.last
users_for_select = users.map {|user| [user.id, "#{user.firstname} #{user.lastname}"] }
于 2012-05-30T07:50:08.633 回答