比较数组中的索引值

comparing index values in an array

我有一个看起来像这样的数组

ranking_array = ['NC', '40', '30/5', '30/4', '30/3', '30/2', '30/1', '30', '15/5', '15/4', '15/3', '15/2', '15/1', '15', '5/6', '4/6', '3/6', '2/6', '1/6', '0', '-2/6', '-4/6', '-15', '-30']

我也有一个模型用户,我的用户有一个排名,它是一个包含在 ranking_array 中的值。

我有一个带有 max_ranking 和 min_ranking 的模型锦标赛,这两个值都包含在 ranking_array.

用户只能在

的情况下订阅锦标赛
tournament.min_ranking<=user.ranking <= tournament.max_ranking

我需要一种方法来比较排名的值(即 ranking_array 索引,因为 ranking_array 是从最低到最高排名排序的)

因此,我需要写下比较这些值索引的方法:

if current_user.ranking_index > tournament.max_ranking_index
  flash[:alert] = "Vous n'avez pas le classement requis pour vous inscrire dans ce tournoi"
elsif current_user.ranking_index < tournament.min_ranking_index
  flash[:alert] = "Vous n'avez pas le classement requis pour vous inscrire dans ce tournoi"

如何使用 each_with_index 实现?

如果你想得到排名的索引,只需要在ranking_array上调用.index即可。

ranking_array.index(current_user.ranking)

我想我理解您要实现的目标:您想确保玩家的排名介于最低和最高排名之间,但您仅将每个模型中的排名存储为字符串。排名数组按升序排列,但我不确定 #each_with_index 是否可行。另一个答案更干净。您还可以阅读有关 Rails 内置枚举 class 的内容,当新手或外部开发人员阅读它时,这将使它更清晰、更容易理解。

你的问题是关于如何用 each_with_index 做到这一点,所以像这样的东西就是你想要的。

ranking_array.each_with_index do |ranking, i|
  return i if ranking == current_user.ranking
end

此外,您的两个警报都闪烁着相同的消息。如果这是故意的而不是拼写错误,您可以像这样组合您的 if 语句:

if current_user.ranking_index > tournament.max_ranking_index || current_user.ranking_index < tournament.min_ranking_index
  flash[:alert] = "Vous n'avez pas le classement requis pour vous inscrire dans ce tournoi"
end