Ruby中的“警告:块参数的多个值(2表示1)”

时间:2012-05-30 07:03:01

标签: ruby-on-rails ruby

我有一个函数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

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

1 个答案:

答案 0 :(得分:1)

警告:它表示您预计1个argt,并且它通过2。 那是因为它“扩展了argts”以考虑2个元素数组。

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

以更好的方式:

如果角色在返回的#users_by_role数据中是uniq,则可以避免使用地图。

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}"] }