【发布时间】:2010-02-28 16:25:14
【问题描述】:
我不确定这是否可行甚至更可取
但我想建立一个 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 |
+--------+-------+-------+------------+---------+-----+
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 来填补不存在的 bookdates 的缺失记录
【问题讨论】:
-
只是为了在思考的同时更好地理解:如果Availables中没有条目,那是否意味着没有可用的东西?在其他哪些情况下,Availables 中没有条目会发生? “特定记录的信息”中的“记录”是指room_id的记录,对吗?
-
嗯,在可用的特定房间价格有多个来源......而且它可能完全丢失但仍然可用。如果是淡季,则来源几乎没有理由更新,它会退回到 room_rates 表中。如果房间真的不可用,在大多数情况下,它会有一个可用记录,其中“spots” = 0 在该特定日期。
-
这就是为什么我希望有一些 has_many 魔法或某种范围来从源头上处理我所有的问题。就目前而言,我有很多逻辑过于分散。
标签: ruby-on-rails ruby named-scope has-many has-many-through