Ruby on rails Rails关系:在多对多关系中引用同一个表两次

Ruby on rails Rails关系:在多对多关系中引用同一个表两次,ruby-on-rails,has-many-through,rails-activerecord,has-and-belongs-to-many,Ruby On Rails,Has Many Through,Rails Activerecord,Has And Belongs To Many,我对rails还很陌生,正在尝试找出关系 我试图建模的数据如下: 活动是人们玩游戏的聚会。 一个事件记录在多个视频中。 一个视频包含多个游戏集。 一个游戏集有两个玩家,玩家1和玩家2 因为一个事件有很多视频,一个视频有很多游戏集,我觉得我应该能够声明一个has_many:through关系,直接从一个事件到游戏集。此外,我应该能够直接从一个玩家转到他参与的所有游戏集 以下是我所拥有的: class Event < ActiveRecord::Base attr_accessible :

我对rails还很陌生,正在尝试找出关系

我试图建模的数据如下: 活动是人们玩游戏的聚会。 一个事件记录在多个视频中。 一个视频包含多个游戏集。 一个游戏集有两个玩家,玩家1和玩家2

因为一个事件有很多视频,一个视频有很多游戏集,我觉得我应该能够声明一个has_many:through关系,直接从一个事件到游戏集。此外,我应该能够直接从一个玩家转到他参与的所有游戏集

以下是我所拥有的:

class Event < ActiveRecord::Base
  attr_accessible :event_date, :event_name, :event_number, :city, :state, :game_sets, :videos
  has_many :videos
  has_many :game_sets, :through => :videos
end

class Video < ActiveRecord::Base
  attr_accessible :name, :url, :event, :game_sets
  belongs_to :event
  has_many :game_sets
end

class GameSet < ActiveRecord::Base
  attr_accessible :player_one, :player_two, :video
  belongs_to :video
  has_one :player_one, :class_name => "Player"
  has_one :player_two, :class_name => "Player"
end

class Player < ActiveRecord::Base
  attr_accessible :first_name, :handle, :home_city, :home_state, :last_name, :tag
  has_and_belongs_to_many :game_sets
end
我得到以下例外

?[1m?[36mGameSet Load (0.0ms)?[0m  ?[1mSELECT "game_sets".* FROM "game_sets" WHERE "game_sets"."id" = 1 LIMIT 1?[0m  ?[1m?[35mPlayer Load (1.0ms)
?[0m  SELECT "players".* FROM "players" WHERE "players"."game_set_id" = 1 LIMIT 1SQLite3::SQLException: no such column: players.game_set_id: SELECT  "players".* FROM "players"  WHERE "players"."game_set_id" = 1 LIMIT 1ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: players.game_set_id: SELECT  "players".* FROM "players"  WHERE "players"."game_set_id"= 1 LIMIT 1

我一辈子都搞不清楚我做错了什么。非常感谢您的帮助。

您的游戏集与其玩家之间的关系是错误的。假设您有两个整数列,其ID分别为player_one和player_two,则该关系应为own_to,而不是has_one。否则,这就意味着玩家有游戏集id链接回游戏集。

你知道,这是有道理的。我想我很难将“has_one”这个标记及其含义与我对现实世界中的关系的看法区分开来。在现实世界中,我认为一个游戏有玩家,而不是一个游戏属于其中的玩家。但实际上,我应该从数据库世界中所代表的意义上考虑这些关系。只有在某些情况下,这种关系才不那么有意义。例如,当一名教师让许多学生完成一门课程时,这一点通常非常清楚。课程属于教师。学生有很多课程,我会的。不过,我还没有机会尝试一下。但我很乐观
?[1m?[36mGameSet Load (0.0ms)?[0m  ?[1mSELECT "game_sets".* FROM "game_sets" WHERE "game_sets"."id" = 1 LIMIT 1?[0m  ?[1m?[35mPlayer Load (1.0ms)
?[0m  SELECT "players".* FROM "players" WHERE "players"."game_set_id" = 1 LIMIT 1SQLite3::SQLException: no such column: players.game_set_id: SELECT  "players".* FROM "players"  WHERE "players"."game_set_id" = 1 LIMIT 1ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: players.game_set_id: SELECT  "players".* FROM "players"  WHERE "players"."game_set_id"= 1 LIMIT 1