カテゴリ: dev
Rails 6 では Action Text
と呼ばれるライブラリが使えるようになるとの発表がありました。どんなライブラリかというと、リッチなテキストエリアを簡単に実装できるライブラリです。こういうやつ。
edge rails を使えば手元でも試すことができるようなので、試してみました。まだ α プレビューなので破壊的な仕様変更があるかもしれませんが、練習として。
GitHub から rails/rails を clone してきた状態で試すのが確実なようです。
$ ./rails/railties/exe/rails new blog --edge
走らせると rails 関連ファイルの生成に続いて webpacker
のセットアップが行われ、 yarn
コマンド経由で JS ライブラリもインストールされます。
2018-10-04 時点では Action Text
は Rails 6 に同梱されていないので、 Gemfile
に追記が必要です。このあたりの作業は Rails 6 リリースまでには不要になるでしょう。
gem 'actiontext', github: 'rails/actiontext', require: 'action_text'
gem 'image_processing', '~> 1.2'
終わったら $ bundle install
しましょう。上記 gem を追加すると、action_text
系のコマンドが使えるようになります。
$ ./bin/rails action_text:install
上記コマンドで以下が生成されます。
Action Text
では「リッチテキストエリアを使って編集するデータ」を所属するテーブルではなく、action_text_rich_texts
という専用のテーブルに切り出して格納します。ここで生成されているマイグレーションファイルは当該テーブルを作成するためのものです。このあたり Active Storage
に考え方が似ていますね。DB を作成し、マイグレーションを流しておきましょう。
$ ./bin/rails db:create db:migrate
例として、タイトル及び本文からなるブログの記事を管理する Post
というModel と、関連する Controller / View を生成します。
$ ./bin/rails g scaffold post title:string
$ ./bin/rails db:migrate
ここで注意したいのは、本文を管理する content
のようなカラムは必要ないということです。先述の通りリッチテキストは actiontextrich_texts
に格納されることになります。マイグレーションまで済んだら、一度 $ ./bin/rails s
で /posts
が動くか確認してみましょう。この段階ではタイトルしか表示 / 編集できないはずです。
app/models/post.rb
を下記のように編集します。has_rich_text
は Action Text
をインストールすると使えるようになるクラスメソッドです。
class Post < ApplicationRecord has_rich_text :content end
post.content
を扱えるように Controller / View に以下のような追記を行います。
def post_params params.require(:post).permit(:title, :content) end
<div class="field"> <%= form.rich_text_area :title %> </div>
<%= @post.content %>
ここまで進んだ状態で http://localhost:3000/posts/new
にアクセスすると、リッチテキストエディタが表示されます。長い行の文字列を入力すると、自動的にテキストエリアが広がります。
Active Storage
との連携で、Drag & Drop で画像を配置することもできます。
Active Storage
との連携も良い感じAction Text
というワードからリッチなテキストエリアを連想できる人がいるのか…?weblog.rubyonrails.org trix-editor.org
現場で使える Ruby on Rails 5速習実践ガイド(特典PDF付き)
Ruby on Rails 5アプリケーションプログラミング