2015-09-06 112 views
1

我有一個叫Work的抽象類和另一個叫做Fanfic的類。在Fanfic模型中,我已經知道它belongs_to :userhas_many :characters以及其他關聯。我決定,當我添加更多的類時,它們會更容易,它們將成爲Work的子類,而不是將所有類型的作品都作爲完全獨立的類。在Ruby on Rails中,子類是否繼承父類的關聯?

現在我想知道是否可以編寫關聯所有的作品都將在Work模型中有所有子類保留所有這些關聯。

對不起,如果它有點混亂。如果您需要澄清或需要查看我的代碼,或者您需要任何其他信息,請告知我們。

+2

是,後人的類會繼承它的方法(關聯等) –

回答

3

不僅要你Work(超)類中定義的關聯(他們會在子類中使用),你也應該使用works表的Work所有子類。

這是Single Table Inheritance的典型情況。

要啓用它,您只需要將type列添加到works表(爲其添加遷移)。

當查詢Tales,例如,Rails的創建下面的SQL查詢:

SELECT * FROM WORKS WHERE type='Tale'; 

有關於這個概念在Rails文檔很大(和consice)新手必看:http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html

+0

我注意到了,並認爲我可能會這樣做,但如果有兩個子類,它們有不同的列。比如讓我們說所有作品都有'title'列,但只有'fanfics'有'章節'列。我仍然可以做單表繼承嗎?如果是這樣,所有其他作品的子類是否有'章節'列/字段? – l1zZY

+0

@ l1zZY你總是擴展'工作表'。所以,如果你將列添加到子類,它也可以從超類和其他子類訪問。 – dimakura