Ruby on rails 或Where活动记录查询中的运算符

Ruby on rails 或Where活动记录查询中的运算符,ruby-on-rails,rails-activerecord,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_and_stickers = game_stickers

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

game_stickers.where('stickers.name != ?', 'Ban')
但是,如果不执行以下操作,如何使用OR运算符对多个字符串测试匹配:

game_stickers.where('stickers.name != ? OR stickers.name != ?', 'Ban', 'Closed')
game_stickers_and_stickers = game_stickers.includes(:sticker)
game_stickers_and_stickers.where('stickers.name = ?', 'Ban').references(:stickers).where(placement_side: side)    
而不恢复到类似[参见下面的注释]:

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

我不想使用最后一个选项的原因是因为我在查询中使用了一些
连接
引用
,而这些(据我所知)不能很好地使用此选项。上下文代码类似于:

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

也许你可以建议做这个查询的最佳方式

注意:在我看来,您希望在这些条件之间使用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')