Rails

【Rails6】配列から空白を取り除きたい場合はreject(&:blank?)ではなくcompact_blankを使おうという話

Rails

 

配列やハッシュから空白を取り除きたい場合、Rails6以前ではreject(&:blank?)reject { |_k, v| v.blank? }を使っていましたが、Rails6からはcompact_blankというメソッドが使用できるようになりました。

ここでいう空白とはblankのことを指し、空だけでなくnilやfalseも含みます。

Rails6以前の空白削除

配列の場合

配列から空白を削除する場合、Rails6以前ではreject(&:blank?)を使用する方法が主でした。

[1, "", nil, 2, " ", [], {}, false, true].reject(&:blank?)
=> [1, 2, true]

ハッシュの場合

ハッシュから空白を削除する場合、Rails6以前ではreject { |_k, v| v.blank? }を使用する方法が主でした。

{ a: "", b: 1, c: nil, d: [], e: false, f: true }.reject { |_k, v| v.blank? }
=> {:b=>1, :f=>true}

Rails6の空白削除

配列・ハッシュに関わらず、Rails6からは空白の削除はcompact_blankで対応できるようになりました。

配列の場合

[1, "", nil, 2, " ", [], {}, false, true].compact_blank
=> [1, 2, true]

ハッシュの場合

{ a: "", b: 1, c: nil, d: [], e: false, f: true }.compact_blank
=> {:b=>1, :f=>true}

まとめ

  • 配列から空白を削除する場合、Rails6以前ではreject(&:blank?)を使用する必要があった
  • ハッシュから空白を削除する場合、Rails6以前ではreject { |_k, v| v.blank? }を使用する必要があった
  • Rails6では配列とハッシュから空白を削除する場合は、compact_blankを使用することが可能になった

参考

 

 

今回は配列やハッシュから空白を削除したい場合、Rails6からはcompact_blankというメソッドが使えるということについて解説しました。既存のコードでreject(&:blank?)reject { |_k, v| v.blank? }を使用している箇所は、ぜひ置き換えてみてください。