2012-02-29 102 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