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オブジェクトです

すべての良い、コードは私にデータを返しますが、それに伴って私は次の警告を受け取ります

警告:ブロックパラメータに複数の値(1の場合は2)

また、私はこれを行うための最適化されたより短い方法を探しています

完全なコードスニペットは次のようになります。

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つの引数を期待していることを示し、2を渡します。これは、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}"] }
于 2012-05-30T07:50:08.633 に答える