更新到Ecto 2.0后,未定义的方法强制转换

时间:2016-07-08 10:25:29

标签: elixir phoenix-framework ecto

我最近迁移到最新版本的phoenix和ecto。

现在我已根据ecto changelog更改了模型的代码

(CompileError) web/models/tag.ex:23: undefined function cast/4.

我得到 defp deps do [{:phoenix, "~> 1.2"}, {:postgrex, ">= 0.0.0"}, {:phoenix_ecto, "~> 3.0"}, {:phoenix_html, "~> 2.6"}, {:phoenix_live_reload, "~> 1.0", only: :dev}, {:gettext, "~> 0.9"}, {:cowboy, "~> 1.0"}, {:httpoison, "~> 0.8.0"}, {:jsx, "~> 2.8"}, {:scrivener_ecto, "~> 1.0"}, {:phoenix_html_simplified_helpers, "~> 0.4.0"}, {:ex_doc, "~> 0.12.0", only: [:dev]} ] end 我遗失的任何东西?

我的mix.exs相关代码

session_start();

1 个答案:

答案 0 :(得分:7)

您还需要导入某些模块:

  import Ecto
  import Ecto.Changeset # This is the one that includes cast
  import Ecto.Query

这在Ecto 1.1中已更改,并在http://www.phoenixframework.org/blog/upgrading-from-v10-to-v11#section-ecto-changes

中提及

你不应该这样做:

defmodule Spaces.Tag do
  use Spaces.Web, :model
#Changed to below
defmodule Spaces.Tag do
  use Ecto.Schema 

相反,您应该将web.ex更新为:

defmodule Spaces.Web do
  def model do
    quote do
      use Ecto.Schema

      import Ecto
      import Ecto.Changeset
      import Ecto.Query
    end
  end
end