首页 > 解决方案 > 创建包含多条记录的新列时正确的语法是什么

问题描述

我在使用 Elixir/Phoenix 文档时遇到问题,所以我想我会在这里问。

我创建了一个boards带有一些文本字段(:title、:owner 等)的表。我现在想创建一个迁移,它将向其中添加一个新字段,该字段将包含一个新members表的多个记录。

迁移文件的正确语法是什么?如何编辑boards.ex?是否有新文件需要的特定位置,即members定义是否需要在boards.ex

标签: postgresqlelixirphoenix-frameworkectophoenix-live-view

解决方案


这是使它工作的代码:

# \lib\vision\boards\board.ex
defmodule Vision.Boards.Board do
  use Ecto.Schema
  import Ecto.Changeset

  schema "boards" do
    field :owner, :string
    field :team_name, :string
    field :title, :string
    has_many :members, Vision.Members.Member

    timestamps()
  end

  @doc false
  def changeset(board, attrs) do
    board
    |> cast(attrs, [:title, :owner, :team_name])
    |> validate_required([:title, :owner, :team_name])
  end
end

# \lib\vision\members\member.ex
defmodule Vision.Members.Member do
  use Ecto.Schema
  import Ecto.Changeset

  schema "members" do
    field :role, :string
    field :username, :string
    belongs_to :board, Vision.Boards.Board    

    timestamps()
  end

  @doc false
  def changeset(member, attrs) do
    member
    |> cast(attrs, [:username, :role])
    |> validate_required([:username, :role])
  end
end

然后在迁移中:

# \priv\repo\migrations\*_member_belongs_to_board.exs
defmodule Vision.Repo.Migrations.MemberBelongsToBoard do
  use Ecto.Migration

  def change do
    alter table(:members) do
        add :board_id, references (:boards)
    end
  end
end

推荐阅读