Rails:如何使类方法范围处理nil参数

时间:2012-03-09 04:13:09

标签: ruby-on-rails ruby-on-rails-3 activerecord

我开始使用类方法范围,因为我需要将一些参数传递给范围。以Rails指南为例:

  def self.1_week_before(time)
    where("created_at < ?", time)
  end

然而,在我的网站中,有时参数可能为零,在这种情况下,我想绕过该范围并转到链中的下一个范围。

我在方法中添加了if条件:

  def self.1_week_before(time)
    if time
      where("created_at < ?", time)
    end
  end

但是当我在范围链接中使用此方法时,它将为nil:NilClass错误提供未定义的方法。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

这会返回nil,因此您在链接时会收到错误:

def self.1_week_before(time)
  if time
    where("created_at < ?", time)
  end
end

为了防止这种情况,您可以返回scoped

def self.1_week_before(time)
  if time
    where("created_at < ?", time)
  else
    scoped
  end
end