Action Textとは?
Rails6から導入された新機能で、リッチテキストと呼ばれるモダンなエディター機能が使える。
今回はこのAction Textの導入方法のメモです。
実装
① 導入
imagemagick
は画像変換するためのツール。
Action Textはエディター内で画像の挿入ができるので必要。
$ brew install imagemagick
Gemfileの以下の部分のコメントアウトを外してbundle install
。
gem 'image_processing', '~> 1.2'
ターミナルに以下をそれぞれ追加。
$ bundle exec rails action_text:install
$ bundle exec rails webpacker:install
ここまでできたら以下のようなmigrationファイルが追加されているのを確認して、migrationを実行。
class CreateActionTextTables < ActiveRecord::Migration[6.0]
def change
create_table :action_text_rich_texts do |t|
t.string :name, null: false
t.text :body, size: :long
t.references :record, null: false, polymorphic: true, index: false
t.timestamps
t.index %i[record_type record_id name], name: 'index_action_text_rich_texts_uniqueness', unique: true
end
end
end
$ rails db:migrate
これで導入完了。
② カラムの削除
Action Textを使用したいmodel部分に以下を追加。
今回はEvent modelとします。
content
の部分はAction Textとして使用したいカラム名なので自分のカラムに合わせてください。
今回はcontent
とします。
has_rich_text :content
ちなみに、
既にcontent
カラムを用意している場合Action Textでは独自のmigrationファイルに入力した値を保存してくれるでcontent
カラム部分は不要になります。
なのでcontent
カラムを消しておきましょう。
カラムの消し方はターミナルでカラム削除用のファイルを作成して、
$ rails g migration RemoveContentFromEvents
remove_column
で削除します。
remove_column
を使う際は最後にデータ型の指定を忘れずに!(text
の部分)
class RemoveContentFromEvents < ActiveRecord::Migration[6.1]
def change
remove_column :events, :content, :text
end
end
③ 反映
では最後にAction Textを使えるように反映していきましょう!
app/assets/stylesheets/actiontext.scss
が追加されているのでそれをapplication.scss
に追加。
trix-editor
というのも追加してCSSを当てます。
@import 'actiontext';
@import 'trix/dist/trix.css';
trix-editor {
min-height: 20em;
max-height: 20em;
overflow-y: auto;
}
最後にAction Textにしたい部分のviewsをrich_text_area
とすることで反映されます!
= f.rich_text_area :text, class: 'form-control'
これで完成!
おまけ
Action Textの内容を検索したい場合は以下の記事を参考にしてみてください!