Метод, который рассчитывает выиграть прожилками


Сейчас я имею следующее:

  • А win_streak колонки на User таблица.
  • Этот метод в game.rb

Я истолковываю win_streak следующим образом:

  • Число, если число игр в стрике
  • Значение (положительное или отрицательное) определяет, будут ли эти игры были победы (положительные) или убытки (отрицательный)

игры.РБ:

def adjust_streak
  u = self.user
  case self.result
    when 'Win'
      u.win_streak > 0 ? u.win_streak += 1 : u.win_streak = 1
    when 'Loss'
      u.win_streak > 0 ? u.win_streak = -1 : u.win_streak -= 1
    end
  u.save
end

Я ищу чище, и более емкий способ сделать это (например, следить за выигрыш/проигрыш прожилками).



180
6
задан 14 февраля 2018 в 06:02 Источник Поделиться
Комментарии
3 ответа


  • Вы можете использовать массив#мин и массив#Макс для расчета выигрышей/проигрышей подряд;

  • Вам не нужно использовать self на геттеры;

  • И вы можете использовать user.update вместо назначения и призвания .save;

  • Я бы тоже переименовать win_streak столбец streak;


def adjust_streak
streak = case result
when 'Win' then [user.streak, 0].max + 1
when 'Loss' then [user.streak, 0].min - 1
end

user.update streak: streak
end

3
ответ дан 19 февраля 2018 в 05:02 Источник Поделиться

Результат будет галстук? Если нет, то можно хранить выигрыши и потери, как булевы значения.

Таким образом можно уменьшить методом:

def adjust_streak
u = self.user
self.result == 1 ? u.win_streak += 1 : u.win_streak = 0
u.save
end

Если результатом является 'победа' (1/верно), то приращение победу, в противном случае, если результатом является потеря на победу равен 0.


Значение (положительное или отрицательное) определяет, будут ли эти игры были победы (положительные) или убытки (отрицательный)

Это может быть сумма в столбце результат при сохранении значения 1 и 0.

1
ответ дан 15 февраля 2018 в 06:02 Источник Поделиться

Я играл вокруг с кучей вариантов, но все время возвращался к структуре у вас. Вот несколько изменений, которые можно применить:

Сделать логику в случаи больше похожи друг на друга / проще:

def adjust_streak
u = self.user
case self.result
when 'Win'
u.win_streak > 0 ? u.win_streak += 1 : u.win_streak = 1
when 'Loss'
u.win_streak < 0 ? u.win_streak -= 1 : u.win_streak = -1
end
u.save
end

Можно использовать #positive?/#negative?:

def adjust_streak
u = self.user
case self.result
when 'Win'
u.win_streak.positive? ? u.win_streak += 1 : u.win_streak = 1
when 'Loss'
u.win_streak.negative? ? u.win_streak -= 1 : u.win_streak = -1
end
u.save
end

Назначение высохнет (предполагается, что результатом может быть только "выиграть" или "убытка"):

def adjust_streak
u = self.user
u.win_streak = case self.result
when 'Win'
u.win_streak.positive? ? u.win_streak + 1 : 1
when 'Loss'
u.win_streak.negative? ? u.win_streak - 1 : -1
end
u.save
end

Как вы упомянули в комментарии на другой ответ, то в столбце имя должно быть streak вместо win_streak.

1
ответ дан 19 февраля 2018 в 02:02 Источник Поделиться