has_many association

时间:2016-05-03 10:07:42

标签: elixir phoenix-framework

用户有很多电子邮件。如何创建新的User并在表单中嵌套一个新的Email

user_controller.ex

[...]
def new(conn, _params) do
  changeset = User.changeset(%User{})
  render(conn, "new.html", changeset: changeset)
end
[...]

form.html.eex

[...]
<%= inputs_for f, :emails, fn ef -> %>
  <div class="form-group">
    <%= label ef, :value, class: "control-label" %>
    <%= text_input ef, :value, class: "form-control" %>
    <%= error_tag ef, :value %>
  </div>
<% end %>
[...]

有一些关于此问题的Stackoverflow问题,但没有一个解决了这个简单的问题。

1 个答案:

答案 0 :(得分:3)

在控制器中,使用Ecto.Changeset.put_assoc/4

alias MyApp.Email

[...]

changeset =
  User.changeset(%User{})
  |> Ecto.Changeset.put_assoc(:emails, [%Email{}])
render(conn, "new.html", changeset: changeset)

这会创建一个带有默认值的空%Email,并将其放在变更集的:emails关联中。