更改URL以在phoenix框架(elixir)中接受字符串而不是id

时间:2016-01-02 20:52:51

标签: elixir phoenix-framework ecto

我正在尝试在凤凰应用程序中实现永久链接。

目标是将localhost:4000 / products / 1更改为localhost:4000 / products / productname

我在permalinks implementation in rails上试过跟随Ryan Bates的剧集 但是无法为凤凰城的模型找到to_param函数。

请帮忙。

2 个答案:

答案 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页面