Bit*_*ise 1 elixir phoenix-framework
我有这个功能:我正在尝试与记录列表进行比较,以查看两者之间是否匹配。
def current_user_has_team?(user, teams) do
user = user |> Repo.preload(:teams)
Enum.member?(user.teams, teams)
end
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为当只有一条记录并且它们匹配时它返回 false。
我怎么说:“看看这个记录列表,这些记录是否与另一个列表匹配?” 在长生不老药?
在 Ruby 中是这样的:
list_1 = [1,2,3]
list_2 = [3,4,5]
(list_1 & list_2).any? => true
Run Code Online (Sandbox Code Playgroud)
要回答原始问题,您可以这样做:
Enum.any?(user.teams, fn team -> team in teams end)
Run Code Online (Sandbox Code Playgroud)
但更好的方法是使用不同的查询-其中之一,如果任何检查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
Run Code Online (Sandbox Code Playgroud)
nil
如果没有匹配项,则查询将返回,如果有,则返回第一个匹配的团队。该!!
会变成一个布尔值,which'll进行匹配的回报true
和非匹配的回报false
。
归档时间: |
|
查看次数: |
2367 次 |
最近记录: |