Elixir 动态预加载表

Elixir 动态预加载表,elixir,ecto,Elixir,Ecto,我在这个查询中动态预加载表 assoc_models = [:example] from( q in queryable, preload: ^assoc_models ) 结果是: #Ecto.Query<from j in TestModel.Join, preload: [[:example]]> #exto.Query assoc_模型中可以有任意数量的表 有一对额外的支架后预加

我在这个查询中动态预加载表

 assoc_models = [:example]
          from(
            q in queryable,
            preload: ^assoc_models
          )
结果是:

 #Ecto.Query<from j in TestModel.Join, preload: [[:example]]>
#exto.Query
assoc_模型中可以有任意数量的表

有一对额外的支架后预加载,我想删除

是否有一种方法可以从列表中获取所有项目,然后将其放入预加载中,从而像这样移除支架

  #Ecto.Query<from j in TestModel.Join, preload: [:example]>
#exto.Query

谢谢

没有额外的括号。如您所见,
preload
assocs
都在同一个列表中


一对括号围绕此列表,另一对括号围绕预载。

没有额外的括号。如您所见,
preload
assocs
都在同一个列表中


一对括号围绕着这个列表,另一对括号围绕着您的预加载。

我假设您想要自动预加载任何给定模式的所有关联。模式模块有一个
。\uuuuu模式/uuu1
函数/宏。要获取如下关联的列表:

iex(15)> OneChat.Schema.Message.__schema__(:associations)
[:user, :channel, :edited_by, :stars, :attachments, :reactions, :mentions]
下面是一个简单的模块,可以在给定模式模块的情况下自动预加载查询

defmodule AutoPreload  do
  def preload(query, schema_module) do
    preloads = schema_module.__schema__(:associations)
    Ecto.Query.preload(query, ^preloads)
  end
end
这就是行动:

iex(17)> AutoPreload.preload(from(m in OneChat.Schema.Message), OneChat.Schema.Message)
#Ecto.Query<from m in OneChat.Schema.Message,
 preload: [[:user, :channel, :edited_by, :stars, :attachments, :reactions, :mentions]]>
iex(17)>AutoPreload.preload(来自(OneChat.Schema.Message中的m),OneChat.Schema.Message)
#异位查询

我假定您希望自动预加载任何给定模式的所有关联。模式模块有一个
。\uuuuu模式/uuu1
函数/宏。要获取如下关联的列表:

iex(15)> OneChat.Schema.Message.__schema__(:associations)
[:user, :channel, :edited_by, :stars, :attachments, :reactions, :mentions]
下面是一个简单的模块,可以在给定模式模块的情况下自动预加载查询

defmodule AutoPreload  do
  def preload(query, schema_module) do
    preloads = schema_module.__schema__(:associations)
    Ecto.Query.preload(query, ^preloads)
  end
end
这就是行动:

iex(17)> AutoPreload.preload(from(m in OneChat.Schema.Message), OneChat.Schema.Message)
#Ecto.Query<from m in OneChat.Schema.Message,
 preload: [[:user, :channel, :edited_by, :stars, :attachments, :reactions, :mentions]]>
iex(17)>AutoPreload.preload(来自(OneChat.Schema.Message中的m),OneChat.Schema.Message)
#异位查询

谢谢您的回复。我的意思是我希望这个查询是这样的。预加载:[:示例]>。有没有办法从assoc_模型中获取所有表并将其放入预加载文件中?我怀疑我理解您为什么要解决可视化问题,但您可以使用命名模型:
assoc_模型=[example::example]
。这样,第二对括号将不会显示在相应的
inspect
代数中。感谢您的回复。我的意思是我希望这个查询是这样的。预加载:[:示例]>。有没有办法从assoc_模型中获取所有表并将其放入预加载文件中?我怀疑我理解您为什么要解决可视化问题,但您可以使用命名模型:
assoc_模型=[example::example]
。这样,第二对括号将不会显示在相应的
inspect
代数中。