2014-12-07 38 views
1

我的Rails proejct使用SMS服務處理模型...rails4,與合併多桌

和短信服務按月命名新表喜歡MMS_201410MMS_201411MMS_201412

和等待表是MMS_List

如何合併多個表像一個模型。

我想利用上市雷

@mm = MergeMms.page(params[:page]).per(30) 

是否有可能一個索引頁?

回答

0

你可以在數據庫中創建一個視圖,工會從表一起行...

CREATE VIEW MMS_List AS 
SELECT * FROM MMS_201412 
UNION ALL 
SELECT * FROM MMS_201411 
... 

大多數情況下,這種解決方案吮吸,因爲你擁有的每出現一個新的MMS表格時更新視圖(但這可以通過cron工作來解決)。您可以通過執行SELECTUNION以與Ruby相同的方式解決此問題,但我不會推薦它,因爲誰知道查詢計劃程序在嘗試跨頁面查詢時會執行什麼操作。

也許最簡單的解決辦法是寫嘗試它現在和以前沒有處理查詢的表當月,如果cron作業,它INSERTS一切從表中的行到您的MMS_List表(SELECT * FROM new_table INSERT INTO MMS_List什麼像那樣)。然後在其他表中插入一行(我們稱之爲MMS_already_processed),它跟蹤哪些表已被處理,以便不重複插入記錄。您需要確保從新發現的表中請求數據的查詢可以獲得對該表的獨佔讀鎖,以便您不只讀取一些行(例如,如果您的cron作業在新表中運行時在創建過程中,當時只有部分數據被插入)。

這是一個問題,您應該先嚐試並在數據層解決。

+0

Thx your advice :)我會嘗試聯合表... @cfeduke – kai 2014-12-07 07:10:21