💁‍♂️

【Rails】ActionText使用時の注意点とバリデーション設定

2023/08/21に公開

使用時の注意点

導入方法の記事はこちらです。
https://zenn.dev/ganmo3/articles/1d6bbc2a370c1c

本題です。
テーブルに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