我有Users
和Leagues
,然后是联接表users_leagues
。我正在尝试做的目标是在创建新联盟时简单创建联接。这是我的模特:
defmodule Statcasters.League do
use Ecto.Schema
import Ecto
import Ecto.Changeset
import Ecto.Query
schema "leagues" do
field :name, :string
has_many :teams, Statcasters.Teams.Team
has_many :users_leagues, Statcasters.UsersLeagues
has_many :users, through: [:users_leagues, :user]
timestamps()
end
end
defmodule Statcasters.Coherence.User do
@moduledoc false
use Ecto.Schema
use Coherence.Schema
schema "users" do
field :name, :string
field :email, :string
coherence_schema()
has_many :teams, Statcasters.Teams.Team
has_many :users_leagues, Statcasters.UsersLeagues
has_many :leagues, through: [:users_leagues, :league]
timestamps()
end
end
defmodule Statcasters.UsersLeagues do
use Ecto.Schema
import Ecto
import Ecto.Changeset
import Ecto.Query
schema "users_leagues" do
field :commissioner, :string
belongs_to :league, Statcasters.League
belongs_to :user, Statcasters.Coherence.User
timestamps()
end
end
def new(conn, _params) do
changeset = %League{}
|> League.changeset()
render(conn, "new.html", changeset: changeset)
end
def create(conn, %{"league" => league_params}) do
user = Repo.get!(User, conn.assigns.current_user.id)
league = %League{}
|> League.changeset(league_params)
|> Repo.insert()
case league do
{:ok, league} ->
conn
|> put_flash(:info, "League Created Successfully.")
|> redirect(to: page_path(conn, :index))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
end
所以基本上在创建联盟时我也想创建用户和联盟之间的联接表。这样做的“凤凰之路”是什么?