elixir - Ecto 去除预紧力

标签 elixir ecto

有什么办法可以逆向预加载吗?

%Post{
  comments: []
}

posts = Repo.all(Post) |> Repo.unload(:comments)

%Post{
  comments: #Ecto.Association.NotLoaded<association :comments is not loaded>,
}

最佳答案

Ecto.Association.NotLoaded 是一个普通的简单结构,所以你可能相对容易地实现这个 unpreload你自己:

defmodule Unpreloader do
  def forget(struct, field, cardinality \\ :one) do
    %{struct | 
      field => %Ecto.Association.NotLoaded{
        __field__: field,
        __owner__: struct.__struct__,
        __cardinality__: cardinality
      }
    }
  end
end

稍后将其用作:

Unpreloader.forget(%Post{....}, :comments)

关于elixir - Ecto 去除预紧力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49996642/

相关文章:

javascript - 如何转义 javascript 's "\"

elixir - 部署中的 Phoenix 错误 : module Connection is not available

elixir - 使 Ecto 架构字段名称与源表列名称不同 (Elixir)

config - EXRM - 我可以从 config.exs 文件设置 vm.args 值吗?

elixir - 用于关联的变更集函数

elixir - 可怕的冗余 Phoenix Controller

mysql - 如何在 ecto(=> 0.11) 中调用 MySQL 存储过程?

elixir - 如何查看为 Ecto.Query 生成的原始 SQL?

elixir - 某些 sql 查询已退出 DBConnection.ConnectionError PID(XXX)

elixir - 卡在迁移中,如何修复 IO.chardata_to_string/1