Rails模型关系

时间:2013-02-05 01:54:12

标签: ruby-on-rails model rails-activerecord

如果我的模型有两个对同一模型的引用,我该如何设置它?我现在拥有的是

class Game < ActiveRecord::Base
    has_one :home_team_stats, :class_name => 'Stats'
    has_one :away_team_stats, :class_name => 'Stats'

class Stats < ActiveRecord::Base
    belongs_to :game

但是,当Activerecord运行查询时,它会搜索game_id为x的第一个Stats条目。因此,如果home_stats是最新条目,则home_stats和away_stats都设置为home_stats条目。如果它是off_game,他们都会被设置为。

Stats Load (0.3ms)  SELECT "stats".* FROM "stats" WHERE "stats"."game_id" = 1 LIMIT 1

根据我的理解,解决这个问题的方法是将关系从has_one更改为belongs_to或类似的东西。虽然这本身就是错误的,但通俗地说,我会说统计数据属于游戏,而游戏则包含主队和客队的统计数据。有没有更好的方法来设置它?

编辑:想出来。

我将游戏模型更改为以下内容:

has_one :home_team_stats, :class_name => 'Stats', :foreign_key => "id", :primary_key => "home_team_stats_id"
has_one :away_team_stats, :class_name => 'Stats', :foreign_key => "id", :primary_key => "away_team_stats_id"

1 个答案:

答案 0 :(得分:2)

问题在于无法将统计数据的实例识别为主页或离开。 (你已经表明了)

可能的解决方法是将home列引入stats,然后将关系更改为:

class Game < ActiveRecord::Base
  has_one :home_team_stats, :class_name => 'Stats', :conditions => {:home => true}
  has_one :away_team_stats, :class_name => 'Stats', :conditions => {:home => false}