これが実現可能かどうか、または望ましいかどうかはわかりません
しかし、has_many リレーションシップまたは条件付きの named_scope タイプのリレーションシップを構築して、2 つではなく 1 つの単純なリレーションシップで問題を解決したいと考えています。
現在、基本的に同じ情報を含み、同じキー room_id を介して同じモデル ルームに属している 2 つのモデルがありますが、2 つの異なる方法でデータを保持しています。1 つは特定の日付に関する特定の情報を含み、2 番目の一般的な曜日の料金は含まれています。主な障害は、Availables に特定のレコードの情報がまったく含まれていない可能性があることです。その場合、特定の日付の特定の価格ではなく、平均の room_rates に従う必要があります。
指針や提案はありますか?ありがとう
利用可能
+--------+-------+-------+------------+---------+-----+
| id | price | spots | bookdate | room_id | min |
+--------+-------+-------+------------+---------+-----+
| 180315 | 14.4 | 1 | 2010-02-27 | 2517 | 1 |
| 231726 | 15.84 | 1 | 2010-03-24 | 2517 | 1 |
| 180311 | 14.4 | 1 | 2010-02-23 | 2517 | 1 |
| 180313 | 14.4 | 1 | 2010-02-25 | 2517 | 1 |
+--------+-------+-------+------------+---------+-----+
客室料金
+-------+---------+-----------+-------+-----+
| id | room_id | dayofweek | price | min |
+-------+---------+-----------+-------+-----+
| 87936 | 2517 | 0 | 14.58 | 1 |
| 87937 | 2517 | 1 | 14.58 | 1 |
| 87938 | 2517 | 2 | 14.52 | 1 |
| 87939 | 2517 | 3 | 14.52 | 1 |
| 87940 | 2517 | 4 | 14.52 | 1 |
| 87941 | 2517 | 5 | 14.4 | 1 |
| 87942 | 2517 | 6 | 14.63 | 1 |
+-------+---------+-----------+-------+-----+
それとも finder_sql メソッドでしょうか? そのような:
has_many :aggregates,
:class_name => 'Available',
:finder_sql => 'SELECT room_id, price, spots, bookdate, MIN(source)
FROM availables
WHERE room_id = #{id}
GROUP BY room_id, price, spots, bookdate'
ただし、room_rates に参加して、存在しない予約日の欠落レコードを埋める必要もあります。