2016-05-03 14 views
0

A User has_many emails. In einem verschachtelten user#new Formular kann ein neuer User mit einem Email erstellt werden. Durch das Senden dieses Formulars wird ein neues User, aber nicht das zugehörige EMail erstellt. Die create Funktion erhält die richtigen Daten, aber erstellt nur die User.Eine verschachtelte Ressource erstellen

Das Protokoll:

[info] POST /users 
[debug] Processing by MyApp.UserController.create/2 
    Parameters: %{"_csrf_token" => "eUYYy4/aGeRCA==", "_utf8" => "✓", 
    "user" => %{"emails" => %{"0" => %{"value" => "[email protected]"}}, 
    "first_name" => "John", "last_name" => "Smith"}} 

web/controllers/user_controller.ex

[...] 
def create(conn, %{"user" => user_params}) do 
    changeset = User.changeset(%User{}, user_params) 

    case Repo.insert(changeset) do 
    {:ok, user} -> 
     conn 
     |> put_flash(:info, "User created successfully.") 
     |> redirect(to: user_path(conn, :index)) 
    {:error, changeset} -> 
     render(conn, "new.html", changeset: changeset) 
    end 
end 
[...] 

Muss ich etwas in der Steuerung zu ändern, dies oder im Modell zu beheben? In Rails wäre es accepts_nested_attributes_for.

Antwort

1

Sie müssen nur einen Anruf zu Ecto.Changeset.cast_assoc/3 in User.changeset/2

etwas hinzufügen wie:

def changeset(model, params \\ :empty) do 
    model 
    |> cast(params, @required_fields, @optional_fields) 
    |> cast_assoc(:emails) 
end 
Verwandte Themen