我有Subcategory
和Category
的表格。 Subcategory
属于Category
,Category
有subcategory
。
在Category
表中,有name
和subcategory
,它是布尔值。
我想要做的是,当用户创建子类别时,它会检查是否有未分配的食物(这意味着food
没有分配给任何子类别),如果没有任何未分配的食物,它将subcategory
表的Category
值更新为true
。
def handle_in("create:subcategory", %{"name" => name, "category_id" => category_id}, socket) do
changeset = Subcategory.changeset(%Subcategory{name: name, category_id: String.to_integer(category_id)})
|>Repo.insert()
unassignedfood = from(f in Myapp.Food, where: f.category_id == ^category_id and is_nil(f.subcategory_id), select: map(f, [:id, :name])) |> Repo.all
if unassignedfood == nil do
category = Repo.get!(Myapp.Category, category_id)
|> Myapp.Category.changeset(%{subcategory: true})
|> Repo.update!
else
category = Repo.get!(Myapp.Category, category_id)
|> Myapp.Category.changeset(%{subcategory: false})
|> Repo.update
end
subcategories = from(p in Myapp.Subcategory, select: map(p, [:id, :name, :category_id])) |> Repo.all
response = %{subcategories: subcategories}
broadcast! socket, "subcategories:updated", response
{:noreply, socket}
end
所以我制作了如上所示的代码,如果没有未分配的食物,请将subcategory
表的Category
值更改为true
。
我检查过没有unassignedfood
但是没有更新。
这是正确的方法吗?我该如何解决这个问题?
提前致谢..
答案 0 :(得分:2)
Repo.all
返回记录列表,空结果为[]
,而不是nil
,因此如果要检查空响应,则需要更改:< / p>
if unassignedfood == nil do
到
if unassignedfood == [] do
如果您只想检查记录是否存在,更有效的方法是将Repo.one
与limit: 1
和select: true
一起使用,然后检查它是否返回true:
unassignedfood = from(f in Myapp.Food, where: f.category_id == ^category_id and is_nil(f.subcategory_id), limit: 1, select: true) |> Repo.one
if unassignedfood do
...
else
...
end