【发布时间】:2013-01-18 15:13:09
【问题描述】:
我对 Rails 还很陌生,并试图弄清楚关系。
我试图建模的数据如下: 活动是人们玩游戏的聚会。 一个事件被记录在多个视频中。 一个视频包含多个游戏集。 一个 GameSet 有两个玩家,player_one 和 player_two。
因为一个事件有很多视频,一个视频有很多游戏集,我觉得我应该能够声明一个 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
我终其一生都无法弄清楚我做错了什么。任何帮助表示赞赏。
【问题讨论】:
标签: ruby-on-rails has-many-through rails-activerecord has-and-belongs-to-many