本当はmysql側のエンコーディング変更すべきですが、アプリケーション側の応急処置として。
class Post < ActiveRecord::Base validate :no_emoji # 本文に絵文字を使わないように def no_emoji if self.content.present? emoji_chars = self.content.each_char.select{|c| c.bytes.count >= 4} if emoji_chars.size > 0 errors.add(:content, "に絵文字(#{emoji_chars.join('')})は使用できません。") end end end end
文字列をeach_char
で回して、バイト数が4以上ある文字を検出しています。
シンプルですが、文字量多い場合は大変。。