用户有很多电子邮件。如何创建新的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问题,但没有一个解决了这个简单的问题。
答案 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
关联中。