0

我试图通过 arr 中的值来安排 @plrdet。

当我选择这种方式时:

@plrdet = Player.find_all_by_fid(arr)

它按表中行的顺序返回,我希望它按 arr 的顺序排序。

例如: Player 包含以下属性:地址年龄、uniqnum。

和:

arr

是 uniqnum 的数组。

arr=[ 456 , 123,789 ]

播放器=[{NYC,32,123},{BSAS,27,456},{LND,30,789})

我正在寻找的结果应该来自 "find_all" player=[,{BSAS,27, 456 },{NYC,32, 123 },{LND,30,789})

4

2 回答 2

1

如果我理解这个问题,我会尝试这样的事情:

哈希版本

players = [{}]
@plrdet.each do |player|
    players << {"adress" => player.adress, "age" => player.age, "fid" => player.fid}
end
players.inspect

现在结果应该是 [{"adress" => BSAS, "age" => 27, "fid" => 456},{"adress" => NYC, "age" => 32,"fid" => 123} ,{"地址" => LND, "年龄" => 30, "fid" => 789}]

阵列版本

players = [[]]
@plrdet.each do |player|
    players << [player.adress, player.age, player.fid]
end

现在结果应该是 [[BSAS,27,456],[NYC,32,123],[LND,30,789]]

种类

我认为这个解决方案应该有效,但我不喜欢它,并且可能有更好的方法来解决您的问题:

sorted_players = [[]] 
arr.each do |arr_fid| 
    sorted_players << players.collect{|player| player if player.include?(arr_fid)} 
end 
于 2013-01-15T12:11:52.857 回答
0

你有两个选择:

  1. 使用order对查询结果进行排序
  2. 使用sort对内存中的结果进行排序

您可以使用 1。它将类似于:

@plrdet = Player.find_all_by_fid(arr).order("address")

于 2013-01-15T11:53:02.297 回答