将我自己的模块定义为 Ecto 中的虚拟字段时出错
Error when defining my own module as a virtual field in Ecto
为什么我不能这样做:
defmodule M1 do
defstruct [:a, :b, :c, :d]
# other stuff
end
# ...............
schema "my_model" do
# .................
field :my_field, M1, virtual: true
错误
** (ArgumentError) invalid or unknown type MyApp.M1 for field :my_field
模块M1已解析,但为什么不能使用?
如果你想在字段中存储一个 M1
结构,你可以通过将类型指定为 :any
来禁用 Ecto 的类型检查,这样你就可以在字段中存储任何东西:
field :my_field, :any, virtual: true
我无法让 Ecto 检查该字段是否是模块 M1
的结构,除非您为该模块实施 Ecto.Type
行为。
为什么我不能这样做:
defmodule M1 do
defstruct [:a, :b, :c, :d]
# other stuff
end
# ...............
schema "my_model" do
# .................
field :my_field, M1, virtual: true
错误
** (ArgumentError) invalid or unknown type MyApp.M1 for field :my_field
模块M1已解析,但为什么不能使用?
如果你想在字段中存储一个 M1
结构,你可以通过将类型指定为 :any
来禁用 Ecto 的类型检查,这样你就可以在字段中存储任何东西:
field :my_field, :any, virtual: true
我无法让 Ecto 检查该字段是否是模块 M1
的结构,除非您为该模块实施 Ecto.Type
行为。