💁♂️
【Rails】ActionText使用時の注意点とバリデーション設定
使用時の注意点
導入方法の記事はこちらです。
本題です。
テーブルにbody等のカラムは不要!
理由は、テキストコンテンツはRichTextモデルに保存されるため(ActionTextインストール時のモデル)。
公式ガイドに以下のことがしっかり書かれていました、、、
エラー内容
俺はbodyカラムを作成していました。公式ドキュメントをちゃんと読んでいなく、自身で作成したカラムにActionTextを適用するものだと誤解していました。
その結果、新規投稿する際に以下のエラーが発生しました。
SQLite3::ConstraintException: NOT NULL constraint failed: articles.body
Update
機能は問題なく作動しており、Create
ができなかったため、原因がわからなくエラーの解決にかなり苦しみました。
結局はAcitionText導入前に作ったレコードだったので、更新がうまくいっていたようです。
Post
モデルからbody
カラムを削除したらエラーは解決しました。
バリデーション設定
has_rich_text
に指定したフィールドはバリデーションを設定ないとnull
禁止になりません。
よって以下のように追記。
class Article < ApplicationRecord
has_rich_text :body
validates :body, presence: true, unless: -> { body.present? }
これにより、もしbody
が空である場合、エラーメッセージが追加されるようにする。
意外に理由は単純だったりするけど気づかないものですね。
メンターさんも使って、一緒に苦しみながらやっと解決しました。
Discussion