比方說,我有一個Rails應用程序,每個使用它的人都是一個正方形。大多數人只是廣場,但有些人可以同時作爲正方形和三角形。
三角形會有不同的(更)比方形等不同長度的邊,三角形的類型等屬性 上has_many :through
閱讀後,我不知道我是否應該Rails對象關係
創建加入表格或
只有一些額外的屬性默認爲nil,除非用戶能夠充當三角形。
如果我確實創建了一個連接表,那麼我會在連續的正方形上創建三角形的連接嗎?
七月四日快樂!
比方說,我有一個Rails應用程序,每個使用它的人都是一個正方形。大多數人只是廣場,但有些人可以同時作爲正方形和三角形。
三角形會有不同的(更)比方形等不同長度的邊,三角形的類型等屬性 上has_many :through
閱讀後,我不知道我是否應該Rails對象關係
創建加入表格或
只有一些額外的屬性默認爲nil,除非用戶能夠充當三角形。
如果我確實創建了一個連接表,那麼我會在連續的正方形上創建三角形的連接嗎?
七月四日快樂!
STI
繼Beerlington
的評論,你可能會想看看Single Table Inheritance -
#app/models/shape.rb
Class Shape < ActiveRecord::Base
has_many :users
end
#app/models/user/triangle.rb
Class Triangle < Shape
end
#app/models/users/square.rb
Class Square < Shape
end
這應該允許您設置:
#app/models/user.rb
Class User < ActiveRecord::Base
belongs_to :shape
delegate :type, to: :shape, prefix: true #-> allows you to call @user.shape_type
end
- -
協會
雖然我認爲這些關聯可能需要經過繼承的模型,但此設置將允許您在需要的任何文件中使用所需的屬性。
例如,對於上面的設置,你可以使用以下命令:
@triangles = Triangle.all
@trianbles.each do |triangle|
triangle.user.name
end
有些事情你應該考慮:
- 你要保持一個single source of truth(單個數據庫表)
- 你想考慮系統中特定形狀的作用(如何你會叫方/三角ngle)
- 不同元素如何影響系統(您是直接還是間接調用Triangle)?
我只是想你需要''has_many:用戶'在Shape類中,因爲其他的繼承於此並且將具有相同的行爲 –
感謝芽!現在會改變 –
如果我正確理解你的問題,你真的不需要關係has_many :through
。
我建議將其設置是這樣的:
用戶
belongs_to :square
belongs_to :triangle
廣場
has_many :users
三角
has_many :users
這些協會需要對用戶的外鍵標籤樂。
我想你想要的是[單表繼承(http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Single+table+inheritance) –