2016-06-30 10 views
4

Was ist der einfachste Weg, um ein Ecto Modell/Record zu klonen? Ich habe ein Rezeptmodell mit vielen Zutaten und eingebetteten Etiketten.Klonen Sie eine Ecto-Aufzeichnung. Mit Einbettungen und zugehörigen Datensätzen?

Modell

defmodule App.Recipe do 
use App.Web, :model 

schema "recipes" do 
    field :name, :string 
    has_many :ingredients, App.Ingredient 
    embeds_many :labels, App.Label 
end 

Clone Rezept Rekord Wie kann ich ein Rezept Datensatz klonen und eine changeset schaffen für ein neues Rezept Datensatz einfügen?

recipe = Repo.get(App.Recipe, 1) 
recipe_changeset = Ecto.Changeset.change(recipe) 

# ... Steps for cloning record with embeds? 

new_recipe = Repo.insert(recipe_changeset) 

Clone Rezept und Zutaten und weisen neue Rezept-ID Zutaten

Wie kann ich klonen ein Rezept Datensatz mit vorinstallierten ingrediens für ein neues Rezept Datensatz mit neuen Zutaten einfügen?

recipe = Repo.get(App.Recipe, 1) 
     |> Repo.preload(:ingredients) 
recipe_changeset = Ecto.Changeset.change(recipe) 

# ... Steps for cloning records?    

new_recipe = Repo.insert(recipe_changeset) 
+0

Sie möchten auch alle Zutaten klonen und ihre 'rezept_id' auf die ID des neuen Rezepts einstellen, richtig? – Dogbert

+0

Ja, ich möchte alle Zutaten klonen und ihnen die neue Rezept-ID zuweisen. – rodeinator

Antwort

0

Entfernen Sie einfach die ID, bevor Sie es wieder ein.

Repo.get(App.Recipe, 1) 
|> Repo.preload(:ingredients) 
|> whatever_you_wanna_do 
|> Map.delete(:id) 
|> Repo.insert