我有这个功能:我试图比较记录列表,看看两者之间是否匹配。
def current_user_has_team?(user, teams) do
user = user |> Repo.preload(:teams)
Enum.member?(user.teams, teams)
end
这不起作用,因为当只有一条记录且它们匹配时,它返回false。
我该怎么说:"看看这个记录列表,在这个其他列表中做这些匹配吗?"在Elixir?
这将是Ruby:
list_1 = [1,2,3]
list_2 = [3,4,5]
(list_1 & list_2).any? => true
答案 0 :(得分:3)
要回答原始问题,您可以这样做:
Enum.any?(user.teams, fn team -> team in teams end)
但更好的方法是使用不同的查询 - 检查id
中是否存在teams
user.teams
的任何查询:
def current_user_has_team?(user, teams) do
ids = Enum.map(teams, & &1.id)
!!Repo.one(from(team in assoc(user, :teams), where: team.id in ^ids, limit: 1))
end
如果没有匹配,查询将返回nil
,如果有,则返回第一个匹配的团队。 !!
会将此变为布尔值,这将使匹配返回true
并且非匹配返回false
。