はRailsのガイドによると、これはあなたが範囲に照会する方法を示します。Railsで日付範囲をクエリするにはどうすればよいですか?
http://edgeguides.rubyonrails.org/active_record_postgresql.html#range-types
## All Events on a given date
Event.where("dates @> ?::date", Date.new(2014, 2, 12))
しかし、どのように私は日付範囲内のすべてのイベントを得るのですか?
は、私はこれを行うことができます知っている:
Event.where("dates && daterange(?, ?)", date1, date2)
しかし、この日付範囲は境界として「[」)を使用してデフォルトになります。実際の範囲が自動的に考慮されるように、2つの日付の代わりに範囲を指定する方法はありますか?これらは異なっていること
お知らせ:
date1..date2 != date1...date2
は、これまでのところ、私はこれをやっている:
if dates.exclude_end?
Event.where("dates && daterange(?, ?, '[)')", dates.begin, dates.end)
else
Event.where("dates && daterange(?, ?, '[]')", dates.begin, dates.end)
end
しかし、より良い方法はありますか?
Event.where("dates && ?::daterange)", dates)
はEDIT:私の場合は
、dates
は日付範囲である私は、このような何かを愛することになります。
[6] pry(main)> Reservation.where(dates: Date.current..4.days.from_now.to_date).explain
Reservation Load (0.8ms) SELECT "reservations".* FROM "reservations" WHERE ("reservations"."dates" BETWEEN $1 AND $2) [["dates", Mon, 30 Jan 2017], ["dates", Fri, 03 Feb 2017]]
ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR: malformed range literal: "2017-01-30"
「Event.where(date:date1 ... date2)」のようなものは、あなたの状況では機能しませんか? – Iceman
いいえ、私の場合、日付列は日付ではなくdaterangeです。 – Nerian
答えの[編集]セクションにクエリの出力を貼り付けました。 – Nerian