2017-02-14 25 views
0

我有這樣的路線:Elixir生成一個帶「?」的網址而不是 「/」

resources "/my_items", ItemController, only: [:index, :show] 
    get "/pages/:page_number", ItemController, :page, param: "page_number" 

我在ItemControllerpages行動,這是一個簡化版本:

def index(conn, p) do 
    # ..... 


def page(conn, %{"page_number" => page_num) when is_nil(page_num) do 
    index(conn, %{"page_number" => 1}) 
end 

def page(conn, %{"page_number" => page_num) do 
    index(conn, %{"page_number" => page_num}) 
end 

當我去 「/頁/ 123」,它工作正常。然而,這樣的:

items_path(conn, :page, page_number: 456) 

拋出異常:

protocol Phoenix.Param not implemented for [page_number: 456] 

回答

2

你希望得到的地圖(基本上,一個Phoenix.Param轉換爲地圖上有):

#   ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓ 
page(conn, %{"page_number" => page_num ... 

和你在那裏通過的是Keyword,那是試圖成爲converted to a Param。既然你已經宣佈帕拉姆名稱,只是做:

items_path(conn, :page, 456) 

旁註:page聲明是無效的藥劑代碼:右大括號,需要在那裏。

相關問題