我正在尝试在凤凰应用程序中实现永久链接。
目标是将localhost:4000 / products / 1更改为localhost:4000 / products / productname
我在permalinks implementation in rails上试过跟随Ryan Bates的剧集 但是无法为凤凰城的模型找到to_param函数。
请帮忙。
答案 0 :(得分:22)
除了Wobbley的回复,凤凰城的to_param
也是通过协议实现的。例如,以下是如何更改产品网址的生成方式:
defimpl Phoenix.Param, for: MyApp.Product do
def to_param(%{name: name}) do
"#{name}"
end
end
Programming Phoenix上也显示了一个更复杂的例子(免责声明:我是其中一位作者)。
答案 1 :(得分:8)
不确定这是否是你要求的,但是你走了:
浏览器堆栈中的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页面返回,那么应该是您所需要的一切,当然您需要在模板/产品下有一个名为“product_info.html.eex”的html页面