【问题标题】:Table belonging to two models?表属于两种型号?
【发布时间】:2016-04-13 12:30:10
【问题描述】:

我想为一个有很多球员和球队统计数据的棒球队建立一个模型。

我还想要一个具有相同统计数据的玩家模型。

如何让静态表同时属于棒球模型和球员模型?

【问题讨论】:

  • 如果“...相同的统计信息”是指要复制数据,请不要这样做。关系数据库的全部意义在于避免冗余数据。您只需保存一次数据并在必要时参考它。我不知道为什么你认为当球队数据和球员数据可以(并且应该)分开时,你需要共享一个统计表。
  • @MarsAtomic 我的意思是他们都希望在统计表中拥有自己的条目。就像球员和球队都会有击球率、打点、本垒打等。
  • 有时,您认为自己在问一个问题,而实际上是在问另一个问题。球队统计数据只不过是该球队球员的汇总数据。因此,可以通过 SQL 查询动态计算它们。 select sum(homers) from player_stats where team_id = 2 and player_status = "active" 这个查询可以让你得到 ID 为 2 的任何团队的 HR 总数。

标签: sql ruby-on-rails


【解决方案1】:

您可以使用多态关联。可以参考here

统计模型

class Statistic < ActiveRecord::Base
  belongs_to :statisticable, polymorphic: true
end

棒球模特

class Baseball < ActiveRecord::Base
  has_many :statistic, as: :statisticable
end

播放器模型

class Player < ActiveRecord::Base
  has_many :statistic, as: :statisticable
end

您的统计模型迁移文件

class CreateStatistic < ActiveRecord::Migration
  def change
    create_table :statistics do |t|
      t.string  :strength
      t.string  :defensive
      t.string  :attack
      t.references :statisticable, polymorphic: true, index: true
      t.timestamps null: false
    end

  end
end

【讨论】:

    猜你喜欢
    • 2011-02-03
    • 2015-09-28
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多