如何在nil上运行第一个方法?

时间:2017-02-20 11:55:24

标签: ruby-on-rails ruby

很抱歉,但我无法理解这一点:

class Customer < ActiveRecord::Base

  def self.first_one
    order(:created_at).first.id
  end

end

如果数据库中有客户,则上述功能将返回第一个客户id

但是如果没有,那就会给我一个错误,因为id无法在nil上运行。

有人可以告诉我如何更改功能,即使数据库中没有任何客户,它也会返回nil吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

:try

上调用某些内容时,您始终可以使用nil来避免错误
order(:created_at).first.try(:id)

这将返回nil,即使order(:created_at).first为零也不会引发任何错误

修改

根据@Ursus的建议如果您使用ruby & 及以上

,您也可以使用2.3.0链接该方法
# >= Ruby 2.3.0 
order(:created_at).first&.id

答案 1 :(得分:2)

更明确的版本可能如下所示:

def self.first_one
  first = order(:created_at).first
  first && first.id
end