我正在使用Phoenix 1.3.0-rc
,我想使用user_path(...)
在我的json回复中打印一个网址。
我的控制器:
...
def show(conn, %{"id" => id}) do
user = User.find(id)
render(conn, "show.json", user: user)
end
...
我的观点:
...
def render("show.json", %{user: user}) do
%{
data: render_one(user, __MODULE__, "user.json"),
links: render_one(user, __MODULE__, "links.json")
}
end
...
def render("links.json", %{user: user}) do
%{
self: "/api/v1/users/#{user.id}"
}
end
...
我想写这个:
self: user_path(conn, :show, user.id)
但是我收到了这个错误:undefined function conn/0
答案 0 :(得分:3)
你必须将conn传递给视图。请注意Phoenix.Controller.render/3
与Phoenix.View.render/3
不同。 “前者期望
一个连接,依赖于内容协商而后者是
与连接无关,通常从您的视图中调用“。 1
在您的控制器中:
def show(conn, %{"id" => id}) do
user = User.find(id)
render(conn, "show.json", user: user, conn: conn)
end
您的观点:
def render("show.json", %{user: user, conn: conn}) do
%{
data: render_one(user, __MODULE__, "user.json"),
links: render_one(user, __MODULE__, "links.json", conn: conn)
}
end
...
def render("links.json", %{user: user, conn: conn}) do
%{
self: user_path(conn, :show, user.id)
}
end
答案 1 :(得分:1)
您可以使用具有相同结果的Endpoint
,例如:
alias MyAwesomeApp.Web.Endpoint
...
use_path(Endpoint, :show, user)