我想列出属于玩家(玩家)的游戏统计信息(Participantstats),并根据玩家的名字(名字)对列表进行排序。很多玩家玩很多游戏。联接表是参与者。每个参与者记录都有一个关联的(单个)参与者统计记录。
我尝试过各种不同的语法,但控制器中的这一行失败了:
@pstats = Participantstat.includes(:participant, :player).order('participant.player.first_name')
错误是
PG::UndefinedColumn:错误:column participantstats.player_id不存在
以下是模型的相关部分:
class Player < ApplicationRecord
has_many :participants, dependent: :destroy
has_many :participantstats, through: :participants
has_many :games, through: :participants
end
class Participant < ApplicationRecord
belongs_to :player
belongs_to :game
has_one :participantstat, dependent: :destroy
delegate :first_name, to: :player
end
class Participantstat < ApplicationRecord
belongs_to :participant
belongs_to :player
delegate :player, to: :participant, allow_nil: true
delegate :first_name, to: :participant
end
class Game < ApplicationRecord
has_many :participants, dependent: :destroy
has_many :players, through: :participants
end
下面是模式的相关片段:
ActiveRecord::Schema.define(version: 20180823002200) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
create_table "games", force: :cascade do |t|
t.text "plays"
end
create_table "participants", force: :cascade do |t|
t.bigint "player_id"
t.bigint "game_id"
t.string "team"
end
create_table "participantstats", force: :cascade do |t|
t.string "result"
t.integer "fga", default: 0
t.integer "fgm", default: 0
t.integer "pts", default: 0
t.bigint "participant_id"
end
create_table "players", force: :cascade do |t|
t.string "first_name"
t.string "email"
end
add_foreign_key "participants", "games", on_delete: :cascade
add_foreign_key "participants", "players", on_delete: :cascade
end
如您所见,我还尝试使用delegate语句(以及后来删除的代码)来获得结果,但没有成功。
下面是生成的SQL,FWIW: