gpt4 book ai didi

ruby-on-rails - Rails - 添加双向关系

转载 作者:行者123 更新时间:2023-12-04 18:25:41 24 4
gpt4 key购买 nike

我正在尝试设置一个跟踪足球比赛的示例应用程序。目前有 3x 个表:

  • field - 特定球队的主场
  • 团队 - 实际的团队本身
  • 游戏 - 一场比赛,将举行两支球队

我可以成功查询“本场比赛是哪两支球队?”,但我很难反推“这支球队参加了哪些比赛?”

我已经使用 Rails 5.1.7 设置了一个新的 Rails 项目,并一直在使用 Rails 控制台查询数据。

迁移

地面

  def change
create_table :grounds do |t|
t.string :ground_name
t.string :ground_location
t.belongs_to :team
t.timestamps
end
end
end

游戏

  def change
create_table :games do |t|
t.timestamps
t.datetime :game_time
t.belongs_to :team_one
t.belongs_to :team_two
end
end
end

团队

  def change
create_table :teams do |t|
t.string :team_name
t.timestamps
end
end
end

模型

地面

class Ground < ApplicationRecord
belongs_to :team
end

游戏

class Game < ApplicationRecord
belongs_to :team_one, :class_name => "Team"
belongs_to :team_two, :class_name => "Team"
has_many :teams
end

团队

class Team < ApplicationRecord
has_one :ground
end

我可以成功查询:

g1 = Game.new
g1.team_one = Team.first
g1.team_two = Team.second
g1.save

Game.first.team_one -> Correctly spits out team
Game.first.team_two -> Correctly spits out team

我希望能够获得一个团队的游戏列表:

Team.first.games
Team Load (0.0ms) SELECT "teams".* FROM "teams" ORDER BY "teams"."id" ASC LIMIT ? [["LIMIT", 1]]
NoMethodError: undefined method `games' for #<Team:0x5a53fa0>
from (irb):1


我肯定遗漏了什么,但希望这是可能的。如果有人能对此有所了解,我将不胜感激!提前致谢。

最佳答案

您可以获得如下游戏。 unscope很重要。如果没有 unscope,查询将无法正确运行。

class Team < ApplicationRecord
has_one :ground
has_many :games, lambda { |team|
unscope(:where)
.where('team_one_id = ? OR team_two_id = ?', team.id, team.id)
}
end

t1 = Team.first
t1.games
#=> [Game id: 1, team_one_id: 1, team_two_id: 2, ..]
t2 = Team.second
t2.games
#=> [Game id: 1, team_one_id: 1, team_two_id: 2, ..]

关于ruby-on-rails - Rails - 添加双向关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58412124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com