object.presence的重点是什么?

在Rails文档中,为object.presence方法提供的示例是:

 region = params[:state].presence || params[:country].presence || 'US' 

但这不等于:

 region = params[:state] || params[:country] || 'US' 

使用presence什么意义?

这就是重点:

 ''.presence # => nil 

所以如果params[:state] == ''

 region = params[:state].presence || 'US' # => 'US' region = params[:state] || 'US' # => '' 

更重要的是,它在每个响应empty?对象上以类似的方式工作(即,如果对象为’空’,则返回nilempty? 方法,例如:

 [].presence # => nil 

这是文档,供参考:

http://api.rubyonrails.org/classes/Object.html#method-i-presence

我只是以一种有用的方式使用它,我发现它很整洁。 我的变量是一个字符串,如果它是我想要的空字符串,否则我希望它转换为整数。

  x.presence.try(&:to_i) "".presence.try(&:to_i) # => nil "22".presence.try(&:to_i) # => 22 

如果要在对象不存在时返回nilpresence非常有用;如果对象存在,则返回对象本身。 换句话说,您需要一个如下所示的代码:

object.present? object : nil

您可以直接调用object.presence而不是上面的行,该方法将为您完成工作。