Elixir 通过通道更新变更集。它不会更新。。
我有Elixir 通过通道更新变更集。它不会更新。。,elixir,phoenix-framework,Elixir,Phoenix Framework,我有子类别和类别的表格子类别属于类别,类别有许多子类别 在类别表中,有名称和子类别,它们是布尔值 我想做的是,当用户创建一个子类别时,它会检查是否有未分配的食物(这意味着食物没有分配给任何子类别),如果没有任何未分配的食物,它会将类别表的子类别值更新为真 def handle_in("create:subcategory", %{"name" => name, "category_id" => category_id}, socket) do changeset = Subca
子类别
和类别
的表格<代码>子类别属于类别
,类别
有许多子类别
在类别
表中,有名称
和子类别
,它们是布尔值
我想做的是,当用户创建一个子类别时,它会检查是否有未分配的食物(这意味着食物
没有分配给任何子类别),如果没有任何未分配的食物,它会将类别
表的子类别
值更新为真
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
所以我做了上面这样的代码,如果没有未分配的食物,将类别的子类别
值更改为真
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
我检查了没有未分配的食物
,但它不会更新
这样做对吗??我怎样才能解决这个问题
提前谢谢 Repo.all
返回记录列表,空结果将是[]
,而不是nil
,因此如果要检查空响应,需要更改:
if unassignedfood == nil 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
Repo.all
返回一个记录列表,空结果将是[]
,而不是nil
,因此如果要检查空响应,需要更改:
if unassignedfood == nil 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
Repo.all
将永远不会返回nil
。你的意思是做未分配的食物=[]
?哦。。。我懂了。我想用未分配的食物
做的是检查是否有食物
没有子类别标识
,或者没有在一个类别标识
。。。我尝试了unassignedfood=[]
,结果成功了。谢谢Repo.all
永远不会返回nil
。你的意思是做未分配的食物=[]
?哦。。。我懂了。我想用未分配的食物
做的是检查是否有食物
没有子类别标识
,或者没有在一个类别标识
。。。我尝试了unassignedfood=[]
,结果成功了。谢谢