В настоящее время я пытаюсь проверить текст отзывов, хранящихся в моей базе данных, с помощью следующего цикла. def bad_words_check bad_words = ["covid", "корона", "коронавирус", ...

0
Ali Ove 3 Мар 2021 в 14:49

2 ответа

Лучший ответ

Если вы просто хотите проверить, не является ли весь комментарий плохим словом:

Comment.where(comment_text: bad_words)

Это то же самое, что:

Comment.where("comment_text ILIKE ANY (ARRAY[?])", bad_words) # for Postegres
Comment.where("comment_text LIKE in ?", bad_words) # for MySql

Однако, если слово можно включить в комментарий, вам следует зациклить и проверить каждый комментарий:

bad_words.each |bad_word| do
   Comment.where("comment_text LIKE in ?", '%#{bad_word}%')
end
3
Adrian Mole 5 Мар 2021 в 08:15

Вы можете использовать ILIKE и ЛЮБОЙ для этого:

bad_words = bad_words.map { |word| "%#{word}%" }

Comment.where("comment_text ILIKE ANY (ARRAY[?])", bad_words)
       .update(flag_covid: true)
2
eux 3 Мар 2021 в 12:21