我正在尋找Rails多態列,比如'喜歡'多個可以「喜歡」的模型。 即。一個Post模型具有 has_many :likes, as: :likable
Rails多態性指數
likes
需要likable_id
(一個整數)和一個likable_type
(字符串)
由於反對使用這種多態設計在所有的表中。 對於速度和內存來說,改爲使用like
中的非多態字段並不是最優的。爲like
架構將
t.integer "post_id"
t.integer "comment_id"
t.integer "etc_id"
在這種情況下
你也可以得到每一列的好處被索引到相應的數據庫表
即。
t.index ["post_id"], name: "index_likes_on_post_id", using: :btree
至於我可以告訴多態性設計只提供作爲「乾淨」,更OO的好處,但是,缺點的確降低優化。
一個字符串將佔用更多的空間,特別是如果像likes
這樣的表類似指數增長。
而且它將比較ints與字符串以及相關表格上的索引來比較慢。
所以我的問題是爲什麼任何人都應該使用這個功能?
我不確定,但如果存在,它可能已經在性能方面進行了測試驗證。我使用適用於不同模型的聊天室的多態關聯。可消息模型確實包含一些數據。在你的情況下,喜歡沒有數據,它只是一個增量。有可能比你提到的更好的解決方案。你也必須記錄喜歡的用戶。所以他可以不像他想要的。喜歡的特徵比我們想象的更復雜,可能有線程解釋不同的技術。 – Maxence