小编Thi*_*hib的帖子

如何通过查询过滤预加载的记录

我列出了记录(包)列表。

这些包通过多对多关系链接到项目:

  • 包有_许多包项目
  • 项目有_许多包项目
  • 项目 has_many :packs,通过:[:packitems, :pack]
  • 打包 has_many :items,通过:[:packitems, :item]

当我列出包时,我想预加载它们的活动项目

def list_packs(params) do
  packs = Pack
    |> preload_active_items()
    |> Repo.all()
    |> Repo.preload([:classroom, [packlanguages: :language]])
end

defp preload_active_items(query) do
  query
    |> join(:left, [pack], _ in assoc(pack, :packitems))
    |> join(:left, [_, pi], _ in assoc(pi, :item))
    |> where([..., i], i.active == true)
    |> preload([_, pi, i], [packitems: {pi, item: i}])
    # |> preload([_, pi, i], [packitems: {pi, item: ^from(i, where: i.active == true)}])
end
Run Code Online (Sandbox Code Playgroud)

一切工作正常(我检索了包及其预加载的项目),但我对那些具有活动项目的包进行了过滤。 …

elixir preload ecto

2
推荐指数
1
解决办法
1117
查看次数

Phoenix 1.3 闪光灯不显示

我的方法put_flash(conn)get_flash(conn)方法表现得很奇怪;当我使用重定向时,一切正常,但当我尝试添加flash_msg后面的控制器时,什么也没有显示。

看起来消息存储在:phoenix_flash而不是:plug_session; 知道那里出了什么问题吗?

  def index(conn, _params) do
    conn
    |> put_flash(:info, "Welcome : info")
    |> put_flash(:error, "Welcome : error")
    render conn, "index.html"
  end

private: %{EverlearnWeb.Router => {[], %{}}, 
:phoenix_action => :index,
:phoenix_controller => EverlearnWeb.PageController,
:phoenix_endpoint => EverlearnWeb.Endpoint,
:phoenix_flash => %{"error" => "Welcome : error", "info" => "Welcome : info"},
:phoenix_layout => {EverlearnWeb.LayoutView, :app},
:phoenix_pipelines => [:browser], :phoenix_router => EverlearnWeb.Router,
:phoenix_view => EverlearnWeb.PageView,
:plug_session => %{"_csrf_token" => "xxx",
 "phoenix_flash" => %{"info" => …
Run Code Online (Sandbox Code Playgroud)

elixir flash-message phoenix-framework

0
推荐指数
1
解决办法
1130
查看次数

标签 统计

elixir ×2

ecto ×1

flash-message ×1

phoenix-framework ×1

preload ×1