Techioz Blog

Rails における Object#presence のポイントは何ですか?

概要

Rails ドキュメントでは、Object#presence メソッドに対して提供されている例は次のとおりです。

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

しかし、それは単に以下と同等ではないでしょうか:

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

プレゼンスを使用する意味は何ですか?

解決策

ポイントは次のとおりです。

''.presence
# => nil

したがって、params[:state] == ’’の場合:

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

さらに、empty? に応答するすべてのオブジェクトで同様の方法で動作します (つまり、オブジェクトが「空」の場合は nil を返します)。メソッド、たとえば:

[].presence
# => nil

参考までに、ドキュメントは次のとおりです。

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