[英]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
我希望SuperUser
是User
的擴展,以便能夠做到這一點:
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。 但是,為什么在這種簡單情況下不進行性傳播感染呢? User
和SuperUser
是否因為擔心節省空間並為它們使用兩個單獨的表而彼此偏離?
對我來說,這似乎是使用單個users
表,並向其中添加type
列。
add_column :users, :type, :string
現在:
class User < ActiveRecord::Base
end
class SuperUser < User
end
它就是有效的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.