我正在建立一个玩家可以购买公司股票的应用程序。拥有特定公司股份最多的玩家是总统。 我有一个公司模型,其方法是check_president。无论何时购买或出售股票,都会调用此方法。 我有一个拥有所有者的股票模型。股票的所有者通过owner_id外键存储。因此,对于每个股票,都有一个单独的记录与自己的所有者。 检查公司总裁的最佳方法是什么?
类似的东西:
def check_president
player_owned_stocks = ownstocks.where(ownable_type: "Player")
if(player_owned_stocks != nil)
*** find player with most stocks, if tied presidency should not change ***
president_id = player with most stocks
else
president_id = nil
end
end
答案 0 :(得分:0)
请试试这个
ownstocks.joins("LEFT JOIN players ON players.id = stocks.owner_id").select("COUNT(*) as total_stocks, players.id as id").group("players.id").order("total_stocks DESC").first.id
这将为您提供公司最大股票的玩家的ID。您可以将此查询放在if条件中。
答案 1 :(得分:0)
这样做的一种方法是生成一个哈希,其中键是owner_id
,值是它在表上的计数。然后使用此哈希查找具有最大值的对。这将是[k, v] => [owner_id, count]
形式的数组。这个数组的第一个元素是你的president_id
hash = player_owned_stocks.group(:owner_id).count
president_id = hash.max_by { |k,v| v }[0]
一个班轮
president_id = player_owned_stocks.group(:owner_id).count.max_by { |k,v| v }[0]