Where活动记录查询中的OR运算符

时间:2019-03-17 23:26:20

标签: ruby-on-rails rails-activerecord

因此,在Where Active Record(AR)查询中,您可以执行以下操作:

game_stickers.where('stickers.name != ?', 'Ban')

但是如何使用OR运算符执行多个操作来测试多个字符串的匹配情况:

game_stickers.where('stickers.name != ? OR stickers.name != ?', 'Ban', 'Closed')

没有恢复为类似[请参见下面的注释]:

game_stickers.where.not(stickers.name: ['Ban','Closed','Block'])

注意:

我不想采用最后一种选择的原因是因为我在查询中使用了一些joinsreferences(据我所知)不能很好地与此选项。上下文代码类似于:

game_stickers_and_stickers = game_stickers.includes(:sticker)
game_stickers_and_stickers.where('stickers.name = ?', 'Ban').references(:stickers).where(placement_side: side)    

也许您可以建议执行此查询的最佳方法。

1 个答案:

答案 0 :(得分:1)

注意:在我看来,您希望这些条件之间为AND,而不是OR。想一想。无论如何,尝试这个

game_stickers_and_stickers = game_stickers.includes(:sticker)
game_stickers_and_stickers.where.not(stickers: {name: ['Ban','Closed','Block']}).where(placement_side: side) 

该条件片段应转换为SQL

WHERE stickers.name NOT IN ('Ban', 'Closed', 'Block')