使用Elixir和Phoenix创建连接表

时间:2017-12-01 03:03:16

标签: elixir phoenix-framework ecto

我有UsersLeagues,然后是联接表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

USER:

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

USERS_LEAGUES:

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

LEAGUE CONTROLLER:

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

所以基本上在创建联盟时我也想创建用户和联盟之间的联接表。这样做的“凤凰之路”是什么?

0 个答案:

没有答案