(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, %{})
我 运行 一些代码 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, %{})