lfx*_*ool 2 elixir ecto phoenix-framework
我运行一些代码iex -S mix
还行吧:
user = Repo.get User, 1
Ecto.Changeset.change user, %{name: "xxxx"}
Run Code Online (Sandbox Code Playgroud)
但这是错误的:
User.change user, %{name: "xxxx"}
Run Code Online (Sandbox Code Playgroud)
增加(UndefinedFunctionError) undefined function Rumbl.User.change/2
我注意到import Ecto.Changeset文件 web.ex 中有函数模型
def model do
quote do
use Ecto.Schema
import Ecto
import Ecto.Changeset
import Ecto.Query, only: [from: 1, from: 2]
end
end
Run Code Online (Sandbox Code Playgroud)
所以我认为 User.change/2 应该与 Ecto.Changeset.change/2 一样工作,对吗?
我认为您可能误解了它的import工作原理。
来自文档:
从其他模块导入函数和宏。
import 允许人们轻松地访问其他模块中的函数或宏,而无需使用限定名称。
这意味着您不必Ecto.Changeset.change(user, %{}在模块内部使用,而是可以使用change(user, %{}).
此更改仅将函数导入到正在使用的模块中。它不会将它们定义为导入模型上的函数。
如果您在 iex 中并且不想键入完全限定的函数名称,您可以执行以下操作:
alias Ecto.Changeset
Changeset.change(user, %{})
Run Code Online (Sandbox Code Playgroud)
或者:
import Ecto.Changeset
change(user, %{})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2428 次 |
| 最近记录: |