Rubyのany?でレコードの配列が特定の日にちの範囲内に含まれているかを判定する

こんにちは!kossyです!




さて、今回はRubyのEnumerableクラスのインスタンスメソッドである、any?メソッドを使って、
レコードが特定の日にちの範囲内に含まれているかを判定するやり方をブログに残してみたいと思います。



環境
Ruby 2.6.3
Rails 6.0.2.1
MacOS Mojave



前提として、User has_many Books という関連が組んであるとします。



コード全晒し

user.books.any? do |book|
  base_date = book.created_at.localtime.to_date
  base_date >= Date.today.ago(3.days) && base_date <= Date.today.in(3.days)
end

userが持っているBookの中で、bookの作成日が前後3日間のレコードがあれば、trueが返り、
一つもなければfalseが返ります。


ちなみに、selectを使えば、前後3日間の条件に合致したレコードを配列にして返すことができます。
findを使うと、条件に合致したレコード1つを返すことができます。



勉強になりました。