Elixir 在父对象中呈现子对象的索引模板';s显示模板

Elixir 在父对象中呈现子对象的索引模板';s显示模板,elixir,phoenix-framework,Elixir,Phoenix Framework,我有一个用户和一封电子邮件脚手架(一个用户有许多电子邮件)。如果用户有电子邮件,我想在用户显示中显示电子邮件索引模板。代码如下: web/controllers/user\u controller.ex [...] def show(conn, %{"id" => id}) do user = Repo.get!(User, id) |> Repo.preload([:emails]) conn |> assign(:user, user) |> ren

我有一个
用户
和一封
电子邮件
脚手架(一个
用户
有许多
电子邮件
)。如果用户有电子邮件,我想在
用户
显示
中显示
电子邮件
索引
模板。代码如下:

web/controllers/user\u controller.ex

[...]
def show(conn, %{"id" => id}) do
  user = Repo.get!(User, id) |> Repo.preload([:emails])

  conn
  |> assign(:user, user)
  |> render("show.html")
end
[...]
[...]
<%= unless Enum.empty?(@user.emails) do %>
  <%= render MyApp.EmailView, "index.html", emails: @user.emails %>
<% end %>
[...]
web/templates/user/show.html.eex

[...]
def show(conn, %{"id" => id}) do
  user = Repo.get!(User, id) |> Repo.preload([:emails])

  conn
  |> assign(:user, user)
  |> render("show.html")
end
[...]
[...]
<%= unless Enum.empty?(@user.emails) do %>
  <%= render MyApp.EmailView, "index.html", emails: @user.emails %>
<% end %>
[...]
[…]
[...]

我得到一个
assign@conn在eex模板中不可用。
错误。如何实现这一点?

您可能在
EmailView
index.html
模板中使用
@conn
,但是
渲染
不会自动将
@conn
从当前模板发送到它要渲染的模板,因此您需要执行以下操作:

<%= render MyApp.EmailView, "index.html", conn: @conn, emails: @user.emails %>