Luc*_*nco 5 elixir phoenix-framework
我正在使用 Phoenix 1.3.0-rc,我想使用 .json 在我的 json 返回中打印 url user_path(...)。
我的控制器:
...
def show(conn, %{"id" => id}) do
user = User.find(id)
render(conn, "show.json", user: user)
end
...
Run Code Online (Sandbox Code Playgroud)
我的看法:
...
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
...
Run Code Online (Sandbox Code Playgroud)
我想这样写:
self: user_path(conn, :show, user.id)
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误:undefined function conn/0
小智 6
您必须将 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
Run Code Online (Sandbox Code Playgroud)
以及你的看法:
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
Run Code Online (Sandbox Code Playgroud)