ruby-on-rails - Mongoid - 同一个外域的两个逆域

标签 ruby-on-rails ruby mongoid

我试图让以下 Mongoid 关系起作用,但每个团队的游戏字段都是一个空数组。这不是一个有效的关系模型吗?我是否需要拆分比赛,即 home_games 和 away_games?

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

>> 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

希望对你有帮助

关于ruby-on-rails - Mongoid - 同一个外域的两个逆域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8191688/

相关文章:

ruby - 在 ERB 模板中转义换行符/行尾

ruby-on-rails - mongoid、set_table_name 和 attr_accessible

ruby-on-rails - Rails 使用 Devise 显示在线用户

ruby-on-rails - Ajax page.replace_html 部分在 Rails 中的问题

ruby-on-rails - 如何将类添加到 erb ruby​​ 元素?

ruby-on-rails-3 - 连接到两个数据库Mongoid

ruby-on-rails - 使用 Rspec 和 Mongoid 5.0 on Rails 4 清理或重置测试数据库

html - Ruby on Rails CSS 未通过 Assets 管道加载

javascript - JSON:未捕获的语法错误:参数列表后缺少)

ruby - 在本地扩展 Faker gem 未初始化常量 Faker::xxx