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