2016-05-03 17 views
2

ユーザーは電子メールをhas_manyしています。どうすれば新しいUserを作成し、フォームにネストされた新しいEmailを1つ作成できますか?has_many関連のネストされたフォーム

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の質問がいくつかありますが、どれもこの単純な問題が修正されていません。コントローラで

答えて

2

Ecto.Changeset.put_assoc/4を使用します。

alias MyApp.Email 

[...] 

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

これがデフォルト値で1つの空%Emailを作成し、チェンジセットの:emails関連して、それを配置します。

関連する問題