前提・実現したいこと
Customer(顧客)テーブルとReservation(予約)テーブルを作成しています。
ここからReservationの予約日に応じて顧客を絞り込みたいと思っております。
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
現状はこのようにReservationテーブルから条件に合うレコードのcustomer_idを絞り出したものを活用してCustomerレコードを絞り込んでいます。
(実際にはwhere文に他数件の条件がつくこともあります)
ruby
1Customer.where(id: Reservation.where("date >=?", params[:date]).pluck(:customer_id).uniq)
発生している問題・エラーメッセージ
上記のコードだとSQLの変数が多くなりすぎてしまうことがあり、
状況によって
too many SQL variables
エラーが発生してしまいます。SQLiteで許されている変数の上限に触れてしまうことで発生するエラーみたいです。
SQLiteでの実装を辞めてしまえ、という話ではありますが、現状それが難しいため、
まずはActiveRecordのコード変更で改善をしたいと思っております。
上記のコード以外で良い書き方があれば教えていただきたいです。
モデル設計のミスもあるのかな…
補足情報(FW/ツールのバージョンなど)
Ruby 2.6.2
Ruby on Rails 5.2.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/16 06:28