Elixir 使用视图上的conn呈现url
我正在使用PhoenixElixir 使用视图上的conn呈现url,elixir,phoenix-framework,Elixir,Phoenix Framework,我正在使用Phoenix1.3.0-rc,我想使用user\u path(…)在我的json返回中打印一个url 我的控制器: ... def show(conn, %{"id" => id}) do user = User.find(id) render(conn, "show.json", user: user) end ... def show(conn, %{"id" => id}) do user = User.find(id) render(conn,
1.3.0-rc
,我想使用user\u path(…)
在我的json返回中打印一个url
我的控制器:
...
def show(conn, %{"id" => id}) do
user = User.find(id)
render(conn, "show.json", user: user)
end
...
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}) 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)
但是我得到了这个错误:
未定义的函数conn/0
您必须将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)
end
...
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
您可以使用具有相同结果的
端点,如:
alias MyAwesomeApp.Web.Endpoint
...
use_path(Endpoint, :show, user)
伟大的它工作得很好!谢谢你对不同渲染之间的差异提出的建议。最好的!