比较数组中的索引值

时间:2015-06-21 15:55:48

标签: ruby-on-rails ruby indexing each

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

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实现这一目标?

2 个答案:

答案 0 :(得分:3)

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

你的问题是关于如何使用each_with_index执行此操作,所以这样的事情就是你想要的。

$(":mobile-pagecontainer").pagecontainer("change", "#triggers", { transition: "slide" } );

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

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

答案 1 :(得分:2)

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

ranking_array.index(current_user.ranking)