#はじめに
右も左もわからない未経験エンジニアが書く投稿です。
膨大な勉強量の中で、気になったことや発見などを書いていこうと思います。
今回はRail6より導入されたActionTextでvalidate length: { maximum: }を扱う際の注意点を
メモしようと思います
#開発環境
Rails 6.1.3.2
actiontext (6.1.4)
#本記事を書くまでの経緯
現在、Railsにてポートフォリオ(Q&Aサイト)の制作をしていて
記事作成・編集時にActionTextを使用しています
(Rails6であれば導入自体はとても簡単なのでおすすめです♪)
ActionTextに文字数制限を掛けたくて
validates :content, length: { maximum: 20000 }
と設定後、テストしてみると文字数が合わないことに気が付きました
初めて使用する機能で、何がどうなってるんだ?と気になり
原因を探ることになったのでメモします
#先に結論
###保存されるデータにはHTMLタグなども含まれます
文字数の制限を掛けたりする時は気をつけましょう!
#本題
####ActiveTextを使用しない場合
「文字数制限かけよう!」となったら
validates :content, length: { maximum: 100 }
と記述すれば100文字以内で記入することを定められ、DBに登録される際は入力された文字がそのまま保存されます
例) 記事に**「こんにちは」**と書いた時
content: "こんにちは"
と保存される
####ActionTextエディタを使用した場合
action_text_rich_text
というテーブルに保存される事になるのですが、ここで異変が起こります
例)記事にエディタ機能(太文字など)を使わずに**「こんにちは」**と書いた時
body: #<ActionText::Content "<div class=\"trix-conte...">
と保存される
保存される前に binding.pry で確認すると中身は
<div class=\"trix-content\">\n こんにちは\n</div>\n"
となっています
「こんにちは」に追加で37文字入っている事になります
#結果
以上の事からActionTextを使用した際は
100文字書き込んだとしたら、100文字以上になってしまう
もちろん画像を含めたり、エディタ機能を使えば文字数はどんどん増えていきます
この事を頭に入れてからlengthをかけましょう♪
#最後に
勉強を始めたばかりで知識もなく、拙い文章ですがアウトプットすることで頭の中を整理しつつ、どなたかのお役に立てれば良いなと思い投稿させて頂きました。
最後まで見て頂きありがとうございました!