前提・実現したいこと
Ruby on RailsのActiveRecordについての質問です。
Customer(顧客)テーブルとReservation(予約)テーブルを作成しています。
ここからReservationの予約日に応じて顧客を絞り込みたいと思っております。
予約日は顧客ごとにいくつか登録されているため、各顧客の予約の中でも最新のレコードを検索対象としたいです。
※最新のレコードというのはレコードの作成日が最新、というのではなく、一番遠い未来の予約日データという意味です。語彙力不足ですみませんが伝わりますか…
【DB定義】
ruby
1create_table "customers", force: :cascade do |t| 2 t.string "name" 3end 4 5create_table "reservations", force: :cascade do |t| 6 t.integer "customer_id" 7 t.datetime "date" 8end
現在は、すべての予約日を検索対象にした検索コードのみ実装しており、以下のように設定しております。
ruby
1customers = Customer.where( 2 id: Reservation.where("date >=?", params[:date]).select(:customer_id).distinct 3)
※https://teratail.com/questions/284241 での質問でmingosさんにご教授いただきました、ありがとうございました!
例えば以下のようなレコードが登録されている場合で2020-08-01〜2020-08-31の予約日に当てはまる顧客を抽出した場合、
ruby
1customers 2id name 31 aaa 42 bbb 53 ccc 6 7reservations 8id customer_id datetime 91 1 2020-08-01 102 2 2020-08-04 113 1 2020-09-01 124 3 2020-08-25
現状実装済みのコードでは
ruby
1id name 21 aaa 32 bbb 43 ccc
となります。これを今回実装したい「各顧客の最新の予約日を検索対象として検索」した場合には
ruby
1id name 22 bbb 33 ccc
となるようにしたいです。(顧客aaaの最新の予約日は2020-09-01であるため、今回の検索範囲には当てはまらない)
ActiveRecordでの実装方法のご教授をお願いいたします。
補足情報(FW/ツールのバージョンなど)
Ruby 2.6.2
Ruby on Rails 5.2.3
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/27 07:39
2020/08/27 09:38
2020/08/27 11:41