我不知道这是否是可行的,甚至最好合计有条件的has_many轨协会
但我想建立的has_many关系或条件named_scope类型的关系,以减轻我的痛苦变成一个简单的关系,而不是二。
目前我有两个模型,它们基本上包含相同的信息,属于相同的模型房间,通过相同的密钥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 |
+--------+-------+-------+------------+---------+-----+
Room_rates
+-------+---------+-----------+-------+-----+
| 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
只是为了得到一个更好的理解,同时考虑这件事:如果没有在可获取的入口,那不是意味着没有可供使用的?在其他情况下可能发生的情况是,Availables中没有条目? “某一特定记录的信息”中的“记录”是否意味着room_id的记录? – ajmurmann 2010-02-28 17:09:47
那么有一个特定的房间价格可用的多个来源...它可能完全缺失,仍然可用。如果是淡季,消息来源没有理由更新,并且回落到room_rates表上。如果房间真的不可用,则在大多数情况下,该房间将具有该特定日期的“景点”= 0的可用记录。 – holden 2010-02-28 18:57:30
这就是为什么我希望有一些has_many魔法或某种范围来处理我的所有问题的源头。就目前而言,我有很多逻辑在进行,这些逻辑太分散了。 – holden 2010-02-28 19:02:23