/ / Clonar um registro Ecto. Com incorporações e registros associados? - elixir, estrutura phoenix, ecto

Clone um registro Ecto. Com incorporações e registros associados? - elixir, quadro de fênix, ecto

Qual é a maneira mais fácil de clonar um modelo / registro Ecto? Tenho um modelo de receita de amostra com muitos ingredientes e rótulos embutidos.

Modelo

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

Clonar registro de receita Como posso clonar um registro de receita e criar um changeset para inserir um novo registro de receita?

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 receita e ingredientes e atribua nova id de receita aos ingredientes

Como posso clonar um registro de receita com ingredientes pré-carregados para inserir um novo registro de receita com novos ingredientes?

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)

Respostas:

0 para resposta № 1

Apenas remova o id antes de inseri-lo novamente.

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