我正在尝试在我的项目的Model上创建范围,但是我希望查询根据Model的方法过滤元素。
这是我的模特:
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行在我的方法年龄上。因此,可能在执行选择时,我的元素将变为零。
我在这里做错了什么?
答案 0 :(得分:2)
给出:
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
方法。