Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 使用视图上的conn呈现url_Elixir_Phoenix Framework - Fatal编程技术网

Elixir 使用视图上的conn呈现url

Elixir 使用视图上的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,

我正在使用Phoenix
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)
    

    伟大的它工作得很好!谢谢你对不同渲染之间的差异提出的建议。最好的!