【发布时间】:2014-10-22 19:42:06
【问题描述】:
当子模型的属性会根据它所属的父类型而变化时,我应该如何设计模型之间的关系?
例如: Player has_many :projections 其中 Projection 实例上的字段将根据它所属的 Player 的“类型”而有所不同。
class Player < ActiveRecord::Base
attr_accessible :name, :position, :team
has_many :projections
validates_uniqueness_of :name, :scope => [:position, :team]
end
class Projection < ActiveRecord::Base
attr_accessible :ppr, :salary, :score, :week, :player_id
belongs_to :player
validates_uniqueness_of :ppr, :scope => [:week, :player_id]
end
所以,我想修改它并向 Projection 添加额外的属性/字段,其中字段根据 Player 模型的“位置”属性而有所不同
要添加的新字段示例如下:
:passing, :completions, :receptions, :targets
位置为“QB”的玩家的投影将如下所示:
Projection.create(passing: 300, completions: 30, week: 8, player_id: 1)
虽然位置为“WR”的玩家的投影看起来像这样:
Projection.create(receptions: 5, targets: 9, week: 8, player_id: 2)
id为1的玩家属于“QB”位置类型,而id为2的玩家属于“WR”类型
它们仍然是“投影”,只是它们会根据玩家的位置保存不同类型的数据。我当前的模式不考虑玩家的位置。目前,它们都具有相同的属性。修改现有模式以考虑这些新数据点的正确方法是什么?我担心在修改以添加此新功能时可能会破坏现有代码。
【问题讨论】:
标签: ruby-on-rails-3 inheritance activerecord database-design