Hello!
I’m working on a chess-like ranking site where a player can add a game played between him and an opponent and then select the winner of the game.
My first setup was to use two tables (users and games). The player would then select himself, an opponent and the winner and the options were saved to the games table as player_id, opponent_id and winner_id. Everything was working fine until I wanted to list all the games and display the usernames of the players.
What I think I should be doing is a many_to_many relation, a game has many players and a player has many games. Now I’ve pretty much hit a wall. So far I have:
schema "users" do
field :username, :string
many_to_many :games, App.League.Game, join_through: "users_games"
timestamps()
end
def changeset(%User{} = user, attrs) do
user
|> cast(attrs, [:username])
|> validate_required([:username])
end
schema "games" do
field :winner_id, :integer
many_to_many :users, App.Accounts.User, join_through: "users_games"
timestamps()
end
def changeset(%Game{} = game, attrs) do
game
|> cast(attrs, [:winner_id])
|> validate_required([:winner_id])
end
How do I get the add game form to list all the users and when added the game_users table will be updated with the user_id?
Is anyone willing to chime with some pointers or code on how I continue from here?