通过渠道更新变更集。它没有更新..

时间:2017-02-03 12:22:42

标签: elixir phoenix-framework

我有SubcategoryCategory的表格。 Subcategory属于CategoryCategorysubcategory

Category表中,有namesubcategory,它是布尔值。

我想要做的是,当用户创建子类别时,它会检查是否有未分配的食物(这意味着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但是没有更新。

这是正确的方法吗?我该如何解决这个问题?

提前致谢..

1 个答案:

答案 0 :(得分:2)

Repo.all返回记录列表,空结果为[],而不是nil,因此如果要检查空响应,则需要更改:< / p>

if unassignedfood == nil do

if unassignedfood == [] do

如果您只想检查记录是否存在,更有效的方法是将Repo.onelimit: 1select: 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