我使用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一样,是不是正确?
答案 0 :(得分:3)
我认为你可能会误解import
的工作原理。
来自the docs:
从其他模块导入函数和宏。
import允许用户轻松访问其他模块中的函数或宏,而无需使用限定名称。
这意味着您不必在模块内部使用Ecto.Changeset.change(user, %{}
,而是可以change(user, %{})
。
此更改仅将函数导入正在使用的模块。它没有将它们定义为导入模型的函数。
如果您在iex中并且不想输入完全限定的函数名称,则可以执行以下操作:
alias Ecto.Changeset
Changeset.change(user, %{})
或:
import Ecto.Changeset
change(user, %{})