即使在冲洗后也无法识别 Ecto 迁移中的字段

Does not recognize field in Ecto migration, even after flush

我正在关注与此类似的事情 ,通过添加一个字段并在迁移中填充它。

def up do
  alter table(:posts) do
    add :urltitle, :string
  end

  flush()

  Repo.all(Post)
  |> Enum.map(fn p ->
       urltitle =
         p.title
         |> String.downcase
         |> Enum.map(fn c -> case URI.char_unreserved?(c) do
                               true -> c
                               false -> '-'
                             end
                     end)
         |> to_string
       Ecto.Changeset.cast(p, %{urltitle: urltitle}, ~w(urltitle))
     end)
  |> Repo.update_all()
end

使用 flush(),它仍然无法识别我的新字段 :urltitle。我收到的错误消息是

(ArgumentError) unknown field urltitle. Only fields, embeds and associations (except :through ones) are supported in changesets

我做错了什么?

这不是 table 没有列的问题。您忘记将字段添加到架构定义中。