2017-02-14 8 views
0

、私はこのルートを持っている:私は "/ページ/ 123" に行くときElixirは "?"でURLを生成します。代わりに "/"

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 

、:

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

は私がpagesためItemControllerでアクションを持っている、それは簡易版ですそれはうまく動作します。しかし、これは:あなたがマップを得ることを期待

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

答えて

2

(基本的には、Phoenix.Paramがあり、マップに変換する)::

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

items_path(conn, :page, page_number: 456) 

例外がスローされますあなたがそこを通過しているものは、です。それはconverted to a Paramです。あなたは既にのparamの名前を宣言しているので、ちょうど行います

items_path(conn, :page, 456) 

追記を:あなたpage宣言が有効なエリクサーコードではありません。中括弧を閉じることが必要です。