這裏是我的架構Rails的多態關係的link_to
class Menu < ActiveRecord::Base
belongs_to :menuable, :polymorphic => true
end
class Page < ActiveRecord::Base
has_one :menu, :as => :menuable
end
class Links < ActiveRecord::Base
has_one :menu, :as => :menuable
end
我想用的link_to在功能表視圖鏈接到一個多態類,例如
<%= link_to menu.name, menu.menuable %>
這是有效的,但是當我想要的是產生鏈接時,它從數據庫中檢索可選擇的對象。你可以想象一下,如果我的菜單很大,這會讓我的應用程序崩潰。
當我將菜單字段捨棄爲多態時,Rails創建了menuable_type和menuable_id。我可以使用什麼來生成一個多態頁面的鏈接,而不是用一個巨大的開關語句編寫一個輔助函數(例如,如果我有大量的菜單「子類」?)
是否渴望加載工作的多態關係?它如何知道要加入的表,而不必先檢索菜單表? – tchen 2009-08-16 10:10:50
我想最多你可以減少負載到存在的多態類型的數量。不幸的是,快速搜索顯示這不是ActiveRecord中的現有行爲。 :(或許是時候回到單表繼承了 – tchen 2009-08-16 10:15:17
我認爲ActiveRecord首先加載所有的Menu記錄,第二步是爲第一個查詢的結果集中的每個menuable_type做一個查詢,我認爲單表繼承是在這種情況下沒有解決方案,因爲兩個模型差別很大。 – gregor 2009-08-16 19:03:19