我試圖在phoenix應用中實現永久鏈接。更改Url以接受字符串,而不是phoenix框架中的id(elixir)
的目標是改變本地主機:4000 /產品/ 1爲localhost:4000 /產品/產品名稱
我嘗試以下瑞恩·貝茨插曲permalinks implementation in rails 但無法找到機型to_param功能鳳凰。
請幫忙。
我試圖在phoenix應用中實現永久鏈接。更改Url以接受字符串,而不是phoenix框架中的id(elixir)
的目標是改變本地主機:4000 /產品/ 1爲localhost:4000 /產品/產品名稱
我嘗試以下瑞恩·貝茨插曲permalinks implementation in rails 但無法找到機型to_param功能鳳凰。
請幫忙。
不知道這是否是你所要求的,但是在這裏你去:
router.ex在瀏覽器堆棧
get "/products/:product_name", ProductController, :get_product_by_name
product_controller.ex
def get_product_by_name(conn, %{"product_name" => product_name}) do
product = Repo.get_by(Product, name: product_name)
render(conn, "product_info.html", product)
end
這應該是如果您希望應用程序根據名稱返回特定的產品作爲html頁面,那麼您需要的全部內容,自然需要在templates/produc下有一個名爲「product_info.html.eex」的html頁面t
除了Wobbley的迴應之外,Phoenix中的to_param
也是通過協議實現的。例如,這裏是你如何可以改變如何產生產品的URL:
defimpl Phoenix.Param, for: MyApp.Product do
def to_param(%{name: name}) do
"#{name}"
end
end
更復雜的例子也顯示在Programming Phoenix(免責聲明:我是作者之一)。
但由phoenix(v1.2.rc)生成的寧靜路線仍然使用:id作爲默認參數名稱,您需要使用顯式設置參數。例如'resources/users「,UserController,param:」name「' –
另外,請看文檔:https://hexdocs.pm/phoenix/Phoenix.Param.html。該協議是可推導的,所以在'schema'調用之前在您的模型中添加'@derive {Phoenix.Param,key::product_name}'就足以在不修改模板的情況下生成適用於網絡的網址(僅限於如何檢索記錄控制器)。 – Eloici