我正在尝试返回一个包含用户数组值的变量。有几个条件必须满足。用户必须public_find
设置为true
,它不能是current_user
(当前登录用户的会话变量),并且它不能已经是友谊的一部分。第一个和第二个条件完美地工作。但是,我遇到了第三部分的问题,其中current_users.friendships
需要是ID
已经存在关联的用户值的数组。有什么想法吗?
@users = User.find(:all, :conditions => ['
public_find=true AND
id <> ? AND
id NOT IN (?)',
current_user.id, current_user.friendships])
编辑:
我发现我错过了列表中的 pluck。现在效果很好。但是,如果某人还没有朋友,那么current_user.friendships.pluck(:friend_id)
将返回NULL
。我知道这是不好的做法,并且在使用NOT IN
and时会返回意想不到的结果NULL
。但是,如果返回的数组为空,您如何创建一个条件,您可以将值设置为 [0] 或 [1] 之类的实际值?
@users = User.find(:all, :conditions => ['
public_find=true AND
id <> ? AND
id NOT IN (?)',
current_user.id, current_user.friendships.pluck(:friend_id) || [0]])
再次编辑:
我让它工作了。但是,现在我想知道这样的声明是否是最佳实践。它基本上是在检查是否current_user.friendships.pluck(:friend_id)
为空。如果是则返回[0]。否则返回用户 ID 数组(外键为friend_id
)。
@users = User.find(:all, :conditions => ['
public_find=true AND
id <> ? AND
id NOT IN (?)',
current_user.id,
(current_user.friendships.pluck(:friend_id).empty? ? [0] : current_user.friendships.pluck(:friend_id))])