рельсы: undefined метод `> 'для nil: NilClass - PullRequest
0 голосов
/ 05 мая 2020

Мне нужно сравнить голоса, если они больше 0. И я получаю сообщение об ошибке: «undefined method`> 'for nil: NilClass »с этим кодом:

def score

    if self.upvotes > 0 || self.downvotes > 0
        self.upvotes > 0 ? (self.upvotes - self.downvotes) : (self.downvotes * -1)
    else
    ....

Ответы [ 2 ]

3 голосов
/ 05 мая 2020

Существует гораздо более простое решение с использованием arithmeti c:

def score
  (upvotes || 0) - (downvotes || 0)
end

Но обычно, если вы получаете nils, это признак того, что у вас должны быть значения по умолчанию для столбцов или следует использовать COALESCE в базе данных запрос, в который вы загружаете данные.

User.select(
  '*', 
  'COALESCE(users.upvotes, 0) - COALESCE(users.downvotes, 0) AS score'
)
0 голосов
/ 05 мая 2020

Ответ был:

  if self.upvotes && (self.upvotes > 0) || self.downvotes && (self.downvotes > 0)
    self.upvotes > 0 ? (self.upvotes - self.downvotes) : (self.downvotes * -1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...