我试图让以下 Mongoid 关系发挥作用,但每个团队的游戏字段都是一个空数组。这不是一个有效的关系模型吗?我是否需要分开比赛,即主场比赛和客场比赛?
class Team
include Mongoid::Document
has_many :games, :autosave => true
end
class Game
include Mongoid::Document
belongs_to :home_team, :class_name => "Team", :inverse_of => :games
belongs_to :away_team, :class_name => "Team", :inverse_of => :games
end
我不认为有直接的方法可以做到这一点,也许你可以通过以下方法解决
class Team
include Mongoid::Document
has_many :home_played, :class_name => 'Game' , :inverse_of => :home_team
has_many :away_played, :class_name => 'Game' , :inverse_of => :away_team
def games
Game.any_of({:home_team_id => self.id},{:away_team_id => self.id})
end
end
class Game
include Mongoid::Document
belongs_to :home_team, :class_name => "Team", :inverse_of => :home_played
belongs_to :away_team, :class_name => "Team", :inverse_of => :away_played
end
所以现在你可以像这样使用它
g = Game.new
+--------------------------+-------+--------------------------+--------------+--------------+
| _id | _type | _id | home_team_id | away_team_id |
+--------------------------+-------+--------------------------+--------------+--------------+
| 4ec76f70b356f8031f000001 | | 4ec76f70b356f8031f000001 | | |
+--------------------------+-------+--------------------------+--------------+--------------+
1 row in set
>> t=Team.new
+--------------------------+-------+--------------------------+
| _id | _type | _id |
+--------------------------+-------+--------------------------+
| 4ec76f75b356f8031f000002 | | 4ec76f75b356f8031f000002 |
+--------------------------+-------+--------------------------+
1 row in set
>> t.save
=> true
g.home_team = t
+--------------------------+-------+--------------------------+
| _id | _type | _id |
+--------------------------+-------+--------------------------+
| 4ec76f75b356f8031f000002 | | 4ec76f75b356f8031f000002 |
+--------------------------+-------+--------------------------+
1 row in set
>> g.save
=> true
and
>> Team.first.home_played
+--------------------------+-------+--------------------------+--------------------------+--------------+
| _id | _type | _id | home_team_id | away_team_id |
+--------------------------+-------+--------------------------+--------------------------+--------------+
| 4ec76f70b356f8031f000001 | | 4ec76f70b356f8031f000001 | 4ec76f75b356f8031f000002 | |
+--------------------------+-------+--------------------------+--------------------------+--------------+
1 row in set
>> Game.first.home_team
+--------------------------+-------+--------------------------+
| _id | _type | _id |
+--------------------------+-------+--------------------------+
| 4ec76f75b356f8031f000002 | | 4ec76f75b356f8031f000002 |
+--------------------------+-------+--------------------------+
abd 你可以得到总计数
>> Team.first.games
希望这可以帮助
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)