Rails找到ID为NOT IN的条件,如何支持映射的空值?

AnA*_*ice 3 ruby ruby-on-rails ruby-on-rails-3

我想向用户显示他们目前还不是其中的所有组.当用户在至少一个组中时,以下工作正常:

Group.find(:all, :conditions => ['id not in (?), @groups.map(&:id)])
Run Code Online (Sandbox Code Playgroud)

当用户在0组中时,这会失败,并且@groups.map(&:id)为null.如果@group.map(&:id)在rails上的ruby中为null/nill,我如何更新上面的内容以支持用例?

谢谢

Chr*_*ald 5

Rails 3包含ARel,它允许您构建分段函数.在这种情况下,这非常方便.

scope = Group
group_ids = @groups.map(&:id)
scope = scope.where(['id not in (?)', group_ids]) unless group_ids.empty?
scope.all
Run Code Online (Sandbox Code Playgroud)

这样做只包括NOT IN要排除的组ID 的条件.当要排除的组为空时,它将不包括查询中的组.