使用Ruby on Rails中的方法通过查询创建作用域

时间:2019-03-07 18:33:07

标签: ruby-on-rails

我正在尝试在我的项目的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行在我的方法年龄上。因此,可能在执行选择时,我的元素将变为零。

我在这里做错了什么?

1 个答案:

答案 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方法。