2012-02-29 101 views
2

我目前正在開發一個使用Rails 3.2的應用程序,並且遇到了一些問題。我知道這已經被問過幾百次了,但我找不到解決它的答案。這裏是一個類似的ER:http://i.stack.imgur.com/x5V0G.pngRails多表繼承和多態關聯

相當明顯,我想要做的。我希望爲協會讀取類似如下:

Supplier.first.theatres.first.events.first.orders 
TourEvent.first.orders 
Tour.first.orders 

現在,這將是很好能夠確定我的模型,像這樣:

class Event < ActiveRecord::Base 
    has_many :orders 
    belongs_to :eventable, polymorphic: true 

    # id, eventable_id, eventable_type, title, date, price 
end 

class TourEvent < Event 
    belongs_to :tour 

    # id, tour_id, rendezvous, guide_name 
end 

class Tour < ActiveRecord::Base 
    has_many :events, class_name: 'TourEvent' 

    # id, name, venue, duration 
end 

但我明白將保留「STI 「而不是」MTI「。任何想法如何讓我的解決方案工作,而不需要複雜的混合或插件?或者它是不可能的?

回答

0

我覺得你可以做這樣的事情:

suppliers 
has_many :events 

events 
belongs_to :suppliers 
belongs_to :institutions 
has_many :orders 
# id, supplier_id, institution_id, ... 

institutions 
# id, type, title, ... 
types: theatre, club, tour 

orders 
belongs_to :events 
# id, event_id 

然後,您可以訪問到事件的命令:

Supplier.first.events.first.orders 
+0

對不起 - 我不認爲你明白的問題。我已經做了一些進一步的閱讀,我相信我是正確的,說現在不可能在Rails 3.2.1(還!)中原生地執行多表繼承。將是一個很好的補充。 – ollym 2012-02-29 15:44:35

+0

正如我在圖片http://i.stack.imgur.com/x5V0G.png中所看到的,您希望存儲在DB供應商,訂單和活動中。活動屬於機構(如劇院或俱樂部)。爲什麼你需要額外的表格,例如theather_events或club_events?爲什麼你需要每個機構的桌子? – ryaz 2012-02-29 16:44:39

+0

每個「機構」存儲不同的信息。區分這一點對我來說很重要。 – ollym 2012-02-29 17:54:52