0

私はレールにかなり慣れていないので、関係を理解し​​ようとしています。

モデル化しようとしているデータは次のとおりです。イベントは、人々がゲームをプレイする集まりです。イベントは複数のビデオに記録されます。ビデオには複数のゲームセットが含まれています。GameSet には、player_one と player_two という 2 つのプレイヤーがあります。

Event には多くのビデオがあり、Video には多くの GameSet があるため、イベントから GameSet に直接移動するには has_many :through 関係を宣言できるはずだと思います。また、あるプレーヤーから、そのプレーヤーが参加したすべての GameSet に直接アクセスできる必要があります。

ここに私が持っているものがあります:

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

しかし、次のようなコードを実行しようとすると:

GameSet.find_by_id(1).player_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

私は一生、自分が間違っていることを理解することはできません。どんな助けでも大歓迎です。

4

1 に答える 1

0

GameSetとそのプレーヤーの間の関係は間違っています。player_oneとplayer_twoのIDを持つ2つの整数列があるとすると、関係はhas_oneではなくbelongs_toである必要があります。それ以外の場合は、GameSetにリンクするgame_set_idを持っているのはPlayerであることを意味します。

于 2013-02-03T22:21:21.207 に答える