使用Controller.where()可能在阵列上测试“不相等”吗?

时间:2013-07-30 21:46:54

标签: ruby-on-rails ruby

是否可以使用'.where()'控制器方法选择不等于的所有db元素到包含ID号的数组?

我可以轻松地使用'.where()'控制器方法来选择所有与数组中存储的ID号列表相等的db元素:

user_event_ids = current_user.event_items.pluck(:event_id)

@user_events = Event.where(id: user_match_ids)

但我似乎无法找到一种方法来选择所有在'user_event_ids'数组中包含ID编号的db-elements。

我尝试过(没有运气):

@non_user_events = Event.where('user_id not in :arr', {arr: user_event_ids})

@non_user_events = Event.where(''user_id != ?', user_event_ids)

两者都不起作用并取消错误。任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:1)

这应该是您所追求的正确语法:

Event.where('user_id NOT IN (?)', user_event_ids)

答案 1 :(得分:0)

这是另一种语法:

Event.find(:all, :conditions => ['user_id not in (?)', user_event_ids])

答案 2 :(得分:0)

鉴于excluded_ids是一个包含您要排除的ID的数组

如果您使用的是Rails 4:

Event.where.not(user_id: excluded_ids)

如果您使用的是Rails 3:

Event.where('user_id NOT IN (?)', user_event_ids)

如果您使用Squeel

Event.where{user_id.not_in excluded_ids}