簡體   English   中英

在Rails中擴展模型

[英]Extend Model in Rails

我正在嘗試在Rails中擴展模型。

模型User在數據庫中使用表users ,其字段為:username:password

class User < ActiveRecord::Base
end

模型SuperUser在數據庫中使用表super_users ,其字段為:user_id:name

class SuperUser < ActiveRecord::Base
 belongs_to :user
end

我希望SuperUserUser的擴展,以便能夠做到這一點:

SuperUser.create(:name => "foo", :username => "bar", :password => "foobar")

或當我獲取數據以獲取類似信息時

> s = SuperUser.find 1
> s.username
> "bar"    

有誰知道我該怎么做?

您想使用單表繼承 (STI)或多表繼承 (MTI)。 這並不像乍看起來那樣復雜。 你可以在這里閱讀

您需要考慮兩種可能的擴展模型的模式。 其中之一, 單表繼承內置在Rails中,並且有據可查 另一種模式是Multi Table Inheritance ,這在Rails中令人驚訝地受到歡迎。 您需要自己實現它或使用不太受歡迎的gem

我認為,在Rails中不能很好地支持MTI的原因之一與性能有關。 例如,即使簡單的User.find 1應在兩個表中進行查找。

您要問的問題(有兩個表)是MTI。 但是,為什么在這種簡單情況下不進行性傳播感染呢? UserSuperUser是否因為擔心節省空間並為它們使用兩個單獨的表而彼此偏離?

對我來說,這似乎是使用單個users表,並向其中添加type列。

add_column :users, :type, :string

現在:

class User < ActiveRecord::Base
end

class SuperUser < User
end

它就是有效的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM