无法删除模型 - 函数Ecto.Query .__ changeset __ / 0未定义或私有

时间:2017-01-27 05:45:28

标签: elixir phoenix-framework ecto

我试图删除一个项目及其所有子项:

where(ParentModel, [x], x.user_id == 123)
|> first
|> Repo.delete()

# or
# Repo.delete(where(ParentModel, [x], x.user_id == 123))

两者都抛出异常:

function Ecto.Query.__changeset__/0 is undefined or private

与验证有什么关系?

在父模型中,我有on_delete: :delete_all

1 个答案:

答案 0 :(得分:4)

first()替换为Repo.one!()Repo.delete_all()Ecto.Query.first()返回一个查询,但Repo.delete()需要模型的结构或变更集。如果你传递一个查询,它就会感到困惑。

使用Repo.one!(),您首先获取结构,然后将其传递给Repo.delete()Repo.delete()可以使用该结构。

Repo.delete_all()可以进行查询,但会直接删除与查询匹配的任何内容。所以要小心。