一個URL在我的鳳凰應用程序創建一個查詢字符串,我想查詢字符串添加到URL:在鳳凰
some_cool_path(@conn, :index, "view-mode": "table")
我預計它會生成一個URL像/some_cool?view-mode=table
,而是它拋出一個例外:
protocol Phoenix.Param not implemented for ["view-mode": "table"]
我該如何解決這個問題?
一個URL在我的鳳凰應用程序創建一個查詢字符串,我想查詢字符串添加到URL:在鳳凰
some_cool_path(@conn, :index, "view-mode": "table")
我預計它會生成一個URL像/some_cool?view-mode=table
,而是它拋出一個例外:
protocol Phoenix.Param not implemented for ["view-mode": "table"]
我該如何解決這個問題?
要建立從關鍵字列表查詢字符串,你可以使用URI.encode_query/1
:
iex(1)> URI.encode_query("view-mode": "table")
"view-mode=table"
但是,這似乎並沒有在這裏是問題。如果您的路線具有一些必需的參數,則您需要在傳遞查詢關鍵字列表之前指定所有參數。
例如:
/users
,你上面的代碼會工作。但如果有一個像/users/:id
必需的參數,你首先需要指定關鍵字列表查詢字符串之前傳遞所需的參數(S)。因此,對於這一點,你應該叫這樣的:
users_path(@conn, :show, @user.username, "view-mode": "table")
謝謝。還有一個問題:假設我有一個帶有「#」 - >'example.com/something#as_table'或者'example.com/something#as_chart'的url。我如何做一個動作中的模式匹配或在控制器中解構它?這意味着,它需要的''# – Jodimoro
這就是所謂的錨或片段後,獲得的價值,它不是可在服務器端,只有客戶端。 [見這個答案](http://stackoverflow.com/questions/34687098/how-to-get-the-fragment-identifier-part-of-an-url)。 – Sheharyar
你能後你到哪兒去定義該路由的路由器代碼? – Dogbert
@Dogbert,只是一個普通的路徑'得到「some_cooll」,控制器1,:action1' – Jodimoro
您的代碼是正確的,如果你有控制器和動作的名稱權。該錯誤消息表明路由實際上在URL中具有強制參數。 'post_path(MyApp.Endpoint,:index,「view-mode」:「table」)#=>「/ posts?view-mode = table」'。你能否在生成'some_cool_path' helper的路由器中粘貼確切的行? – Dogbert