2013-07-16 2 views
1

Я новичок в Rails и Ruby, и я работаю над системой elo за столом, который отслеживает игроков и их победы, потери и elo.Ошибка синтаксиса для проекта Rails

Сейчас я получаю сообщение об ошибке

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

Я обыскивал все мои файлы для отсутствующего закрытия Paren или кронштейна, но ничего не могу найти. Вот некоторые фрагменты моего кода:

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 

Если кто-то может мне помочь, было бы весьма признателен.

EDIT: В соответствии с просьбой, вот строки 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 
+1

Это является недопустимым: 'ELSIF (6 <вар <= 15)' – lurker

+0

Я исправил эту ошибку, но синтаксическая ошибка все еще происходит. Линией, выделенной под извлеченным источником, является @players_items = Player.all.sort {| y, x | x.get_elo() <=> y.get_elo()} –

+1

Ошибка (которая имеет проблему с копией/вставкой, поскольку она имеет некоторую синтаксическую ошибку, дополнительный пароль) находится на строке 'player.rb' 36, но вы показываете только часть этот файл, поэтому мы не можем определить, какая строка - 36. Модель вызывается из контроллера, и ошибка также показывает это. Можете ли вы показать строки вокруг строки 36 в 'player.rb'? – lurker

ответ

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 
+0

Похоже, что это сделал трюк –

1

Ваш (6 < var <= 15) является допустимым синтаксисом, но не имеет смысла. Это означает (6 < var) <= 15. Поскольку 6 < var будет true или false, тогда он будет оцениваться как true <= 15 или false <= 15, что приведет к ошибке, если вы не странно переопределили <=>.

Возможно, вы указали (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 
+0

О, я не знал, что логический синтаксис был написан таким образом в Ruby. К сожалению, я попробовал это, и это не решило мою проблему. Из сообщения об ошибке строка, выделенная с ошибкой, равна @players_items = Player.all.sort {| y, x | x.get_elo() <=> y.get_elo()} –

Смежные вопросы