2012-05-20 16 views
1

我正在構建一個具有一些複雜數據關係的Rail 3.2應用程序。我想知道什麼是構建數據庫的最佳方式。Rail應用程序中的雙向多態關係的缺點是什麼?

我試圖模擬coud的數據與Facebook的元素進行比較。

例如,有一個用戶可以創建項目:

  • 評論
  • 照片
  • 帖子
  • 狀態
  • 更新

每個項目都可以屬於

  • 用戶
  • 業務
  • 位置

因此,例如, 「用戶A帶着在巴黎麥當勞的照片」。

我想在每個用戶,業務和位置頁面上顯示活動流。

我認爲這樣做的方式涉及雙向多態關係。

一個活動:

class ActivityFeed 
    belongs_to :feedable, :polymorphic => true 
end 

class Comment | Photo | Status 
    has_many :activity_feeds, :as => :feedable 
end 

和一個所有權

class ActivityOwner 
    belongs_to :ownable, :polymorphic => true 
end 

class User | Business | Location 
    has_many :activity_owners, :as => :ownable 
end 

然後activity_owner將屬於activity_feed,並activity_feed會有很多activity_owners。

我希望有道理嗎?

這是處理這種情況的好方法嗎?我應該考慮哪些性能問題?有沒有更好的辦法?

後續問題:使用這種方法,是否有可能以多種方式將同一模型映射到多態關係。例如,用戶可以是照片的所有者,並且他們可以是標記的用戶。

我仍然試圖學習Rails,我正在努力解決這個問題。我非常感謝來自他人的意見,經驗和想法,以及任何有用的信息或指南。

謝謝!

回答

0

http://blog.smartlogicsolutions.com/2008/06/13/ruby-on-rails-polymorphic-association-benchmarks/

它是舊一點點,但還是在實際工作

沒有什麼大的缺點,如果使用正確的索引,只是少列在你的數據庫

+0

謝謝尤里,這是真正有用的知道這些表現數字。我認爲我關心的只是這些表格的大小。例如,每張照片都會在ActivityOwner表(用戶,業務,位置)中有三條記錄。如果有標記的用戶或喜歡,或...這個數字會更大。 ActivityOwner表將很快變大,即使多態關聯表現良好,仍然會有一些開銷。因此,我想知道是否有更好的方法去? –

-1

有趣的烏爾,看一看Polymorphic Association (revised)由Ryan貝茨。我認爲這將是你嘗試做的完美方法。尼斯和乾淨太

+0

嗨,vezu,我沒有意識到Ryan已經更新了他的railscast。不可思議的時機,謝謝指出。我想我的問題確實是下一步。如何最好地將不同的模型(我Ryans案例文章,事件,照片)合併成一個集合,以便它們可以顯示在不同的所有者模型上 –

相關問題