質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

1回答

1089閲覧

各顧客の最新の予約日を検索対象にして、検索指定した予約日に一致する顧客を抽出したい

yoshi-fim

総合スコア3

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2020/08/23 03:17

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Customer.joins(:reservations) .where(reservations: { date: Reservation.group(:customer_id).select('max(date)')} , date: params[:date] })

これでどうかなぁ、、、

投稿2020/08/24 23:47

winterboum

総合スコア23401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshi-fim

2020/08/27 07:39

ご回答ありがとうございました。 試してみたのですがうまくいきませんでした… date: params[:date]の部分は問題なかったのですが、Reservation.group(:customer_id).select('max(date)')}でマッチするレコードがありませんでした。。。
winterboum

2020/08/27 09:38

う〜〜む。 力量超えたかも。も少し考えてみます
yoshi-fim

2020/08/27 11:41

ご協力感謝いたします、引き続きよろしくお願いいたします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問