我不知道這是否是可行的,甚至最好合計有條件的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