Создание области с запросом из метода на Ruby on Rails - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь создать область действия для модели в моем проекте, но я хочу, чтобы запрос фильтровал элементы на основе метода в моей модели.

Это моя модель:

class Talent < ApplicationRecord
  scope :public_profile, -> { Talent.all.select{ |t| t.age > 13 } }

def age
  now = Time.now.utc.to_date
  now.year - self.birth_date.year - ((now.month > self.birth_date.month || 
  (now.month == self.birth_date.month && now.day >= self.birth_date.day)) ? 0 : 1)
end

Когда я пытаюсь запустить эту область, я получаю сообщение об ошибке:

 NoMethodError: undefined method `year' for nil:NilClass
    from app/models/talent.rb:195:in `age'
    from (irb):6:in `block in irb_binding'
    from (irb):6

Строка 195 по моему методу age. Так что, вероятно, при выполнении выбора, мой элемент прибывает ноль.

Что я здесь не так делаю?

1 Ответ

2 голосов
/ 07 марта 2019

Учитывая:

NoMethodError: undefined method `year' for nil:NilClass

И учитывая, что вы только дважды вызываете метод year в методе age:

def age
  now = Time.now.utc.to_date
  now.year - self.birth_date.year - ((now.month > self.birth_date.month || 
  (now.month == self.birth_date.month && now.day >= self.birth_date.day)) ? 0 : 1)
end

И учитывая, что nowнаверняка не будет nil:

now = Time.now.utc.to_date

Казалось бы, self.birth_date возвращает nil.И, как говорится в ошибке, у nil нет метода year.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...