我不确定这是否可行甚至更可取
但我想建立一个 has_many 关系或有条件的 named_scope 类型关系,以减轻我对一个简单关系而不是两个的痛苦。
目前我有两个模型,它们基本上包含相同的信息,并且通过相同的 key room_id 属于相同的模型房间,但以两种不同的方式保存数据。一个包含特定日期的特定信息,第二个包含一周中几天的通用费率。主要障碍是,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 来填补不存在的 bookdates 的缺失记录