2012-05-28 29 views
3

我需要一個特定的模型來包含對文檔的引用。大多數模型可以存儲在postgres中。該模型適用於遊戲中的「關卡」。我想將關卡數據本身存儲在文檔中,這比在sql中製作複雜的樹更有意義。Mongoid和Postgres腳手架/關係

我可以使用安裝了mongoid的postgres;然而,在安裝了mongoid寶石之後,我似乎只能夠支撐mongoid(非活動記錄)文檔。

問題是我有其他表的引用,我並不知道如何鏈接到一個mongoid模型。

問題:

  1. 如何強制腳手架用的活動記錄,而不是mongoid反之亦然發生。 編輯:部分回答在這裏:Using Active Record generators after Mongoid installation?(第2個答案的作品,但我不知道怎麼去來回方便)

  2. 是否有從活動記錄模型參考文檔的簡單方法(我知道文件說不要混合它們,但它是我想要做的理想)。

  3. 如果無法將它們混合,那麼應該如何使文檔從postgres/active記錄表中引用。換句話說,我怎樣才能同時獲得這兩個數據呢?

謝謝!

+0

爲什麼不直接將級別數據作爲JSON blob存儲在同一個表中或相同postgresql數據庫中的相鄰表中? – yfeldblum

+0

這是可行的,但我只是覺得在postgres裏面存儲一個json blob並不是工作的正確工具。一旦它進入那裏也是不可讀的。然後當你把它拉出來時,你需要每次解析它。然後,一旦你把它放回去就把它串起來。我的意思是如果你正在創建一個文檔,而不是使用面向文檔的數據庫,那麼面向文檔的數據庫的作用是什麼?速度是偉大的,但它不像postgres是緩慢的。 – Parris

回答

6

關於你的第一個問題,理想的解決方案應該是引用文章中的第一個答案。但是,不是生成遷移,而是生成模型。所以,當你想要一個活動記錄模式,只需運行:

rails g active_record:model 

至於你的第二個和第三個問題,一個活動記錄模式有Mongoid文件只需將存儲的ObjectId作爲模型中的字符串相關聯。然後,當你得到一個記錄時,在字符串中創建一個新的ObjectId並用它來查詢相關文檔。

您可以創建對象標識出這樣的字符串:

BSON::ObjectId.from_string("object_id_string") 

混合和ActiveRecord的和Mongoid之間的匹配,但這樣我的時候是不是真的有一個簡單的方法可以輕鬆地遵循內部ORM關係恐怕必須通過Ruby代碼完成。

您在rails中定義的模型要麼擴展一個ORM的基類,要麼另一個不知道另一個。可能有些項目在這些ORM上充當一個層,但我目前還不熟悉任何存在的項目。