"位置活动记录查询"中的 OR 运算符



所以在 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)    

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

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

最新更新