Phoenix发布"协议可枚举未实现"调用路径助手时出错

时间:2016-11-13 02:44:05

标签: phoenix-framework

对于Phoenix应用程序,我创建了以下两条路线:

scope "/", Greeter do
  pipe_through :browser

  get "/hello", HelloController, :show
  get "/hello/:name", HelloController, :show
end

通过它们,应用程序可以响应" / hello"和" / hello / alice"路径。

但是,当我使用路径助手hello_path(@conn, :show, "alice")生成" / hello / alice"时,Phoenix服务器会发出以下错误消息:

协议可用于" alice"

原因很简单。

第一条路线创建了两个助手hello_path/2hello_path/3,但第二条路线只创建了一个助手hello_path/4,因为已经定义了hello_path/3

hello_path/3要求可枚举作为第三个参数。

我该如何避免此错误?

1 个答案:

答案 0 :(得分:1)

您可以使用as:为其中一个路径指定其他名称:

get "/hello", HelloController, :show
get "/hello/:name", HelloController, :show, as: :hello_with_name

测试:

iex(1)> import MyApp.Router.Helpers
MyApp.Router.Helpers
iex(2)> hello_path MyApp.Endpoint, :show
"/hello"
iex(3)> hello_path MyApp.Endpoint, :show, foo: "bar"
"/hello?foo=bar"
iex(4)> hello_with_name_path MyApp.Endpoint, :show, "alice"
"/hello/alice"
iex(5)> hello_with_name_path MyApp.Endpoint, :show, "alice", foo: "bar"
"/hello/alice?foo=bar"