我已经盯着很久了,我不确定为什么我的条件没有触发。我删除了所有内容,然后将其留给两个条件和输出。由于某种原因,它会为所有数据返回完整的赢/输数组(长度为510),而不能只是该匹配团队的赢/输。
def self.average_win_percentage(team_id)
results = @@game_data.reduce([]) do |accum, game|
if game.home_team_id == team_id
game.home_goals > game.away_goals ? accum << "win" : accum << "loss"
end
if game.away_team_id == team_id
game.away_goals > game.home_goals ? accum << "win" : accum << "loss"
end
accum
end
results
end
有人知道为什么它不触发吗?我觉得它的确很明显,但我现在根本看不到。
@@ game_data中的每个元素如下所示。由于它是从csv中解析出来的,因此病态仅共享一个元素。
@away_goals=2,
@away_team_id="3",
@date_time="5/16/13",
@game_id="2012030221",
@home_goals=3,
@home_team_id="6",
@season="20122013",
@type="Postseason",
@venue="Toyota Stadium",
@venue_link="/api/v1/venues/null"
作为参数传递的team_id也是字符串类型
答案 0 :(得分:2)
您的方法之一的返回值很可能不是您所期望的。您可以从没有您的方法的示例中看到它正常运行。您必须提供原始数据才能更有用。
在顶部使用binding.pry
和require 'pry'
设置一个断点。然后检查返回值。也许一个ID是一个字符串,另一个ID是一个整数或类似的数字。
results = [1,2,3].reduce([]) do |accum, game|
puts game
if true
1 > 0 ? accum << "win" : accum << "loss"
end
if true
1 > 0 ? accum << "win" : accum << "loss"
end
accum
end
results
#=> ["win", "win", "win", "win", "win", "win"]
require 'pry'
results = [1,2,3].reduce([]) do |accum, game|
puts game
if true
0 > 1 ? accum << "win" : accum << "loss"
end
if false
1 > 0 ? accum << "win" : accum << "loss"
end
accum
end
results
#=> ["loss", "loss", "loss"]