对于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/2
和hello_path/3
,但第二条路线只创建了一个助手hello_path/4
,因为已经定义了hello_path/3
。
此hello_path/3
要求可枚举作为第三个参数。
我该如何避免此错误?
答案 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"