(UndefinedFunctionError) 模型中的未定义函数 change/2

(UndefinedFunctionError) undefined function change/2 in Model

我 运行 一些代码 iex -S mix

没关系:

user = Repo.get User, 1

Ecto.Changeset.change user, %{name: "xxxx"}

但这是错误的:

User.change user, %{name: "xxxx"}

提高(UndefinedFunctionError) undefined function Rumbl.User.change/2

我注意到文件 web.ex

中的函数模型中有 import Ecto.Changeset
def model do
  quote do
    use Ecto.Schema

    import Ecto
    import Ecto.Changeset
    import Ecto.Query, only: [from: 1, from: 2]
  end
end

所以我认为 User.change/2 应该和 Ecto.Changeset.change/2 一样工作,对吗?

我认为您可能误解了 import 的工作原理。

来自the docs

Imports functions and macros from other modules.

import allows one to easily access functions or macros from others modules without using the qualified name.

这意味着您不必在模块内部使用 Ecto.Changeset.change(user, %{},而是可以使用 change(user, %{}).

此更改仅将函数导入正在使用的模块。它没有将它们定义为导入模型的函数。

如果你在 iex 中并且不想输入完全限定的函数名,你可以这样做:

alias Ecto.Changeset
Changeset.change(user, %{})

或:

import Ecto.Changeset
change(user, %{})