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

时间:2016-04-11 16:31:00

标签: elixir phoenix-framework ecto

我使用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一样,是不是正确?

1 个答案:

答案 0 :(得分:3)

我认为你可能会误解import的工作原理。

来自the docs

  

从其他模块导入函数和宏。

     

import允许用户轻松访问其他模块中的函数或宏,而无需使用限定名称。

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

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

如果您在iex中并且不想输入完全限定的函数名称,则可以执行以下操作:

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

或:

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