我有一个简单的模型(短版):
defmodule MyApp.User do
use Ecto.Model
@derive {Poison.Encoder, only: [:id, :name, :email]}
schema "users" do
field :name, :string
field :email, :string
belongs_to :company, MyApp.Company
我希望在尝试对模型进行编码时@derive
排除:company
关联,但似乎没有。使用 Guardian 序列化程序时会发生这种情况:
defmodule MyApp.GuardianSerializer do
@behaviour Guardian.Serializer
alias MyApp.Repo
alias MyApp.User
def for_token(user = %User{}), do: { :ok, "User:#{user.id}" }
def for_token(_), do: { :error, "Unknown resource type" }
def from_token("User:" <> id), do: { :ok, Repo.get(User, id) }
def from_token(_), do: { :error, "Unknown resource type" }
end
我实际上不确定会发生什么
def for_token(user = %User{}), do: { :ok, "User:#{user.id}" }
据我了解user = %User{}
,试图测试作为参数给出的对象是否是有效的User
变更集,对吗?
但我得到了这个错误:
无法将关联 :company 从 MyApp.User 编码为 JSON,因为未加载关联。请确保您已预加载关联或将其从要编码的数据中删除
我不想预加载它,因为它需要更多的依赖来编码,这也不起作用,我宁愿忽略它。
为什么only
参数@derive
不起作用,我该如何解决这个问题?