2017-06-06 58 views
0

我迄今所創建的查詢:動態選擇地圖外生

query = from page in "wagtailcore_page", 
     where: page.url_path == ^url_path, 
     join: h in ^table_name, 
     where: h.page_ptr_id == page.id 

我現在想動態地選擇屬性h

例如,如果我通過在[:body, :footer]我想運行:

query = from [_page, h] in query, 
     select: %{body: h.body, footer: h.footer} 

我發現Ecto.Query.API.map看起來像它可以用於解決這個問題。

但是當我運行:

from [_page, h] in query, select: EctoApi.map(h, [:body]) 

我得到的錯誤:

** (Ecto.Query.CompileError) `EctoApi.map(h, [:alphatext])` is not a valid query expression 

據當時map documentation我們必須包括在關係中使用外鍵的底部IMPORTANT消息當執行我們沒有做的連接時,但是我不知道如何做這種類型的assoc我們正在做的動態連接類型

+3

這是否工作:'從[_page,h]查詢中選擇:map(h,[:body,:footer])'? – Dogbert

+0

不,我得到:'**(Ecto.Query.CompileError)map(h,[:body,:footer])不是一個有效的查詢表達式「 –

+0

其實,它工作! Fab,感謝@ dogbert –

回答

1

map可以在不輸入任何內容的情況下使用。實際功能在Ecto內部實現,Ecto.Query.API.map/2僅用於文檔目的。以下應該工作:

from [_page, h] in query, select: map(h, [:body, :footer])