Я столкнулся с stack level too deep
и имеет бесконечный цикл, но я не могу понять, почему, поэтому я надеюсь, что кто-то еще сможет это обнаружить.Rails Infinite Loop - Уровень стека слишком глубокий
У меня есть этот метод в моей модели игры:
def self.record_win_or_tie(game_id)
game = Game.find(game_id)
if game.home_team_score > game.away_team_score
game.home_team_won = true
game.save
end
end
Когда я запускаю его из консоли для игры, где условный истинно (т.е. game.home_team_score больше game.away_team_score), если продолжает работать один и тот же запрос снова и снова.
SELECT `games`.* FROM `games` WHERE `games`.`id` = 1 LIMIT 1
Если я запускаю код для game_id, где условная ложь, запрос ищет игру только один раз и нет бесконечного цикла.
* UPDATE *
я понял, что проблема заключалась в том, что я звоню метод из моего GameObserver:
class GameObserver < ActiveRecord::Observer
def after_save(game)
Game.record_win_or_tie(game.id)
end
end
Однако, я не знаю, как настроить свой код. Требование состоит в том, чтобы автоматически обновлять либо game.home_team_won
, либо game.away_team_won
после того, как кто-то обновил game.home_team_score
или game.away_team_score
.
Кажется, я не могу использовать наблюдателя для этого.
Какой метод сообщается в сообщении об ошибке, которое выполняется снова и снова? И педантично, у вас нет бесконечного цикла, а скорее бесконечная рекурсия. –
Не могли бы вы также добавить свой метод 'find()'? –
Когда я запускаю игру.record_win_or_tie (game_id) 'из консоли, он показывает запрос на поиск игры, он показывает, что он устанавливает' home_team_won = true', а затем повторяет запрос поиска игры повторно и заканчивается 'SystemStackError: уровень стека слишком глубокий Может быть, ошибка IRB! ' – yellowreign