lebronkoukou
@lebronkoukou (光聖 西田)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

コメント機能等で特定のワード(悪口など)を制限することは可能ですか?

Railsで作成したアプリの文字に対するバリデーション?は可能か

現在railsで簡単な投稿アプリを学習がでら作成しているのですが、ふと投稿に対するコメント機能を実装していて気になることがありました。
それはコメントする際にあらかじめ決められたワードに対してはpostできないようにすることです。
理論上はモデルファイルにてバリデーションのところをいじるのかなと思いつつも文字数の制限や言語の選択(英語か日本語かなど)くらいで特定の文字列に対してどのように実装すればいいのかわかりません、、、
おそらくgemでそのような実装ができるのかなと思いつつも検索で見つけることができなかったため知ってるよ!という方いらっしゃればご教示願えれば幸いです。

自分で試したこと

ちなみにググってみたところヒットしなかったため公式の情報も見てみようかと思います。

0

1Answer

カスタムバリデーションを実装すれば大抵のことは可能ですので、入力されたテキストとNGワードリストのマッチングするようなバリデーションを作ってやればいいのではないでしょうか。

イメージ
class Hoge < ApplicationRecord
  validate :body_cannot_contain_blacklist_words
  
  def body_cannot_contain_blacklist_words
    blacklist = ['hoge', 'fuga']
    if body.present? && blacklist.any?{ |word| body.include?(word) }
      errors.add(:contain_blacklist_words, ": 禁止単語が含まれています。")
    end
  end

end

gemも軽く調べてみた感じ、古そうですが一応obscenityというgemがあるようです。Railsアプリでイタズラ投稿(NGワード)と格闘してみた話

1Like

Comments

  1. @lebronkoukou

    Questioner

    ありがとうございます!!
    カスタムバリデーションという存在自体初めて知りました!(*_*)!
    早速実装に取り掛かってみます!
    貴重な情報ありがとうございました🙇‍♂️🙇‍♂️🙇‍♂️
  2. @lebronkoukou

    Questioner

    早速実装してみました!
    すごい!!ちゃんと弾かれてました!ありがとうございます^0^
    それで、、また実装できない箇所がありまして、もし宜ければ以下のqaもみていただけると幸いです、、、、
    https://qiita.com/lebronkoukou/questions/b281286e88034859ead7
    とはいえ本当に助かりました!
    ありがとうございました🙇‍♂️

Your answer might help someone💌