Rails项目的语法错误

时间:2013-07-16 19:22:37

标签: ruby-on-rails ruby syntax-error

我是Rails和Ruby的初学者,我正在开发一个用于跟踪玩家及其胜利,损失和elo的桌子的elo系统。

现在我收到了错误

app/models/player.rb:36: syntax error, unexpected keyword_end, 
expecting end-of-input):
app/controllers/players_controller.rb:3:in `index'

我已经搜索了所有文件,因为找不到关闭的支撑或支架,但找不到任何东西。以下是我的代码的一些片段:

PlayerController索引

def index
@players_items = Player.all.sort{|y,x| x.get_elo() <=> y.get_elo()}
end

PlayerModel方法

def get_elo()
    return self.elo
end

def update_weight()
    var = wins.count + lose.count
    if(var <= 6)
        self.weight = 50
    elsif(6 < var and var <= 15)
        self.weight = 25
    else
        self.weight = 15
    end
end

def update_elo(p2_elo, result)
    p1_elo = self.elo
    expected_score = 1 / (1 + 10 ** ((p2_elo - p1_elo)/400))
    self.elo += (self.weight * (result - expected_score)).round
end

如果有人能帮助我,我们将不胜感激。

编辑:根据要求,这是我的播放器模型类的第27-36行

def win_percentage()
    var = wins.count + lose.count
        if(var == 0)
            return 0.001
    end
    else
        return ((wins.count * 6) - (lose.count * 4))
    end
end
end

2 个答案:

答案 0 :(得分:2)

这是问题:

if(var == 0)
            return 0.001
    end # <~~ why this end keyword ?
    else
        return ((wins.count * 6) - (lose.count * 4))
    end

应该是:

if(var == 0)
  return 0.001
else
  return ((wins.count * 6) - (lose.count * 4))
end

答案 1 :(得分:1)

您的(6 < var <= 15)是有效的语法,但没有意义。这意味着(6 < var) <= 15。由于6 < vartruefalse,因此会将其评估为true <= 15false <= 15,除非您奇怪地覆盖<=>,否则会导致错误1}}。

您可能打算(6 < var and var <= 15)

<小时/> 更新

你有两个问题。

  • else ... end之后,你有if ... end。您可能希望if ... else ... end
  • 最后还有一个额外的end

您的代码看起来不太好。应该是这样的:

def win_percentage
  return 0.001 if (wins.count + lose.count).zero?
  (wins.count * 6) - (lose.count * 4)
end