cannot
m1 = Repo.get(MyModel, 123)
|> Map.delete(:id)
m2 = Repo.insert!(m1, %{my_field: "aaa"})
# or
# m2 = Repo.insert!(MyModel.changeset(m1, %{my_field: "aaa"}))
manipulate
(RuntimeError) attempting to cast or change association `my_assoc1` from `MyModel` that was not loaded.
Please preload your associations before manipulating them through changesets
my_assoc1_id
我有一个模型,它有几个" belongs_to "和 "has_many "我想用一个新生成的 "id "和一些其他字段的新值来复制它。
和错误。
我不想预先加载每个关联。此外,如果我想让一个复制的模型实例拥有
,这是一个整数,与原始实例相同,也就是说,是否加载关联应该是不重要的。 我有一个模型,它有几个" belongs_to "和 "has_many",我想用一个新生成的 "id "和其他字段的新值来复制它。 m1 = Repo.get(MyModel, 123) 像这样铸造关联 belongs_to
或 has_many
直接使用。这些关联是一个抽象层,这样你可以更容易地操作数据。
比如说
schema "my_model" do
belongs_to :my_field, Example
end
如果你看一下数据库或迁移, 你可以注意到,一个字段称为: my_field_id
被创建,其中包含指向其他表的外键。
如果你想克隆一个包含所有关联的实体,你只需要创建一个变化集,确保外键也被投递。
def changeset(my_model, params \\ %{}) do
user
|> cast(params, [:my_field_id])
|> validate_required([:my_field_id])
|> foreign_key_constraint(:my_field_id)
end