如何在 Elixir/Phoenix 中将项目添加到循环列表
How to add an item to list in cycle in Elixir/Phoenix
我正在学习Elixir/Phoenix,有一个任务摆在我面前。我需要循环过滤数据库中的结果。像这样:
user = Repo.get_by(User, api_token: token)
rooms = Repo.all(Room)
result = []
if !Enum.empty?(rooms) do
Enum.each rooms, fn room ->
users = Poison.decode!(room.users)
if Enum.member?(users, user.id) do
result = result ++ [room]
end
end
end
json(conn, %{"rooms" => result})
但是这种情况不允许我将项目附加到列表中,为什么?因为这是一种函数式语言......
有没有办法将项目附加到循环列表中?
哦,是的,也许你问我 "Why you just don't get objects from the database by user id?" 我会说 room.users 存储 json 编码为字符串
的数组
只要你想 select 列表中的某些项目,你可以使用 Enum.filter/2
。您还可以使用 in
运算符代替 Enum.member?/2
.
user = Repo.get_by(User, api_token: token)
rooms = Repo.all(Room)
result = Enum.filter(rooms, fn room ->
user.id in Poison.decode!(room.users)
end)
您也可以使用 for
代替 Enum.filter/2
:
result = for room <- rooms, user.id in Poison.decode!(room.users), do: room
我正在学习Elixir/Phoenix,有一个任务摆在我面前。我需要循环过滤数据库中的结果。像这样:
user = Repo.get_by(User, api_token: token)
rooms = Repo.all(Room)
result = []
if !Enum.empty?(rooms) do
Enum.each rooms, fn room ->
users = Poison.decode!(room.users)
if Enum.member?(users, user.id) do
result = result ++ [room]
end
end
end
json(conn, %{"rooms" => result})
但是这种情况不允许我将项目附加到列表中,为什么?因为这是一种函数式语言...... 有没有办法将项目附加到循环列表中?
哦,是的,也许你问我 "Why you just don't get objects from the database by user id?" 我会说 room.users 存储 json 编码为字符串
的数组只要你想 select 列表中的某些项目,你可以使用 Enum.filter/2
。您还可以使用 in
运算符代替 Enum.member?/2
.
user = Repo.get_by(User, api_token: token)
rooms = Repo.all(Room)
result = Enum.filter(rooms, fn room ->
user.id in Poison.decode!(room.users)
end)
您也可以使用 for
代替 Enum.filter/2
:
result = for room <- rooms, user.id in Poison.decode!(room.users), do: room