2013-11-15 32 views
2

我有了一些基本的實體如何使聯合查詢ORM(ActiveRecord的)模型在Rails的

應用

帖子 職位有:

  • 喜歡
  • 評論
  • 和評分

然後我有一個SQL視圖查詢所有三個。我有一個叫做PostActivityView的模型。一個帖子都有一個活動視圖,以便我可以調用

@post.activity_view

返回適當的值的集合(從頂次數,評論和評分)。這一切正常工作。

我的問題是,這返回hashmaps的集合,而不是評論,喜歡和評級。這是有道理的,因爲我的觀點是創建一個新的「PostEvents作爲(...)」結果。我的問題:是否有一種方法來推廣這些結果並用ActiveRecord對象表示它們?

喜歡,評論和評分有不同的屬性,所以我在視圖中做了一些別名(評論有評論。文本和評級的人可以有文本rating.comments,所以在需要時我會重新命名像review.comments這樣的東西。身體)。所以我的結果都具有相同的屬性。看起來我應該可以創建一個像PostEvent這樣的ActiveRecord對象,它只有別名列。這可能嗎?

回答

1

我不知道如何去做你所描述的。但是,你真的需要將它們存儲在單獨的表格中嗎?您可以將它們全部保留在單個表中,並使用單個表繼承(http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Single+table+inheritance)爲特定行所代表的每種類型的事物分別設置類(喜歡,評論或評級)。然後,常見的東西可以坐在父類,特定於更細粒度的東西可以進入後代類。

這聽起來像你的情況是相反的,你將單獨的表合併成一個單一的聯合。我懷疑在ActiveRecord本身實現起來會非常困難,因爲不同的數據庫有不同的規則來規定如何修改數據庫視圖的內容以及何時可以修改內容(例如,如果您可以創建一個AR類,以您的方式引用您的視圖「重新提出,會發生什麼,當你調用保存?)

1

這聽起來像你已經走了下來,提供一個視圖,以方便檢索所有這些對象的一組作爲一個單一類型的對象的路徑,當你的要求是真的要帶回不同的對象。

基於此,我會質疑視圖的使用。我不是反觀你明白 - 我們使用它們在我們的應用程序中爲了性能原因生成只讀報告 - 但是如果你需要將行作爲適當的對象類型返回,那麼我會檢索他們分別作爲喜歡,評論和評級。