Я работаю на веб-сайте соревнования ИИ, где вы можете загрузить контроллер pacman или ghosts, они оценены и результаты отображаются на сайте.
У меня есть одна таблица дляконтроллеры, называемые «агентами»:
class CreateAgents < ActiveRecord::Migration
def change
create_table :agents do |t|
t.string :ctype # either 'pacman' or 'ghosts'
t.references :user, :null => false
...
t.timestamps
end
...
end
end
Каждый контроллер принадлежит пользователю, и они могут быть двух типов: «pacman» или «ghosts».
Выбраны два контроллера(один pacman, один ghost), и они играют в игру, и игра сохраняется в базе данных:
class CreateGames < ActiveRecord::Migration
def change
create_table :games do |t|
t.integer :pacman_agent_id
t.integer :ghosts_agent_id
t.integer :score
t.timestamps
end
...
end
end
Когда я хочу выбрать, скажем, агента pacman для конкретной игры, я просто делаюa:
Game.first.pacman
с помощью использования own_to с соответствующим ключом foreign_key:
class Game < ActiveRecord::Base
belongs_to :pacman, class_name: 'Agent', foreign_key: 'pacman_agent_id'
belongs_to :ghosts, class_name: 'Agent', foreign_key: 'ghosts_agent_id'
end
Однако я не могу понять, как сделать обратное, то есть выбрать игры,для конкретного агента.
Я хотел бы сделать что-то вроде этого:
Agent.first.games
Так что бы возвращались игры для этого конкретного контроллера, независимо от того, является ли он контроллером pacman или ghosts.
Это то, что я пытался, но это не работает:
class Agent < ActiveRecord::Base
belongs_to :user
has_many :games, foreign_key: (:ctype == 'pacman' ? 'pacman_agent_id' : 'ghosts_agent_id')
end
Есть идеи?Может быть, моя база данных неверна?
Заранее спасибо!