Rails新機能ActionText

Rails6より新機能としてActionTextが実装された。

内容としては入力フォームを作る際に斜体や太文字などリッチなフォーム、ちょうどHatenaBlogの入力画面の様なフォームを作成することができる。実際に作ってみたがとても簡単に実装することができた、ていうかRailsを6にすることの方がアホみたいに時間がかかった。今回はRailsのバージョンを6にするところから記事にしていきたいと思います。写真は完成形

f:id:yusukeisizaki:20190710163458p:plain

<Railsのバージョン上げ>

他のバージョンに上げる方法が自分はできなかったためRails6へのバージョンアップは別の方法をとりました

githubrails/railsより $git clone https://github.com/rails/rails.git もしくはgithubのホームページよりダウンロードzip

・$./rails/railties/exe/rails new アプリ名 --edge でアプリを作成する。このコマンドでrails関連のファイルの生成とRails6からのwebpackerのセットアップが完成する

・$bundle install

 

<Action Textを使う>

・$ ./bin/rails action_text:install でActionTextのインストールができる。

このコマンドで

  • app/assets/stylesheets/actiontext.scss
  • test/fixtures/action_text/rich_texts.yml
  • app/views/active_storage/blobs/_blob.html.erb
  • db/migrate/20191234567890_create_active_storage_tables.active_storage.rb
  • db/migrate/20191234567890_create_action_text_tables.action_text.rb

のファイルが生成される。ActionTextではActionTextエリアで編集される情報を別テーブルに切り分けて行う(ActiveStrageと似た考え)

・rake db:create でデータベース作成

・$rake db:migrate でマイグレーション

・$rails g scaffold モデル カラム:string でスキャフォールディングする。

今回は$rails g scaffold post title:string とする

・再び $rake db:migrate

 

・app/models/post.rb にActionText用のアソシエーションを書く

 >|ruby|

class Post < ApplicationRecord

 has_rich_text :content 

end

||<

 

app/controllers/posts_controller.rb コントローラーに追記

def post_params

 params.require(:post).permit(:title, :content)

end

ストロングパラメーターでtitleしか許可されていなかったものをcontentも許可する

 

app/views/posts/_form.html.erb 入力フォームを編集する

 

<div class="field">

  <%= form.rich_text_area :title %>

</div>

form.rich_text_areaで特殊編集可能なフォームができる

 

・viewに結果を表示させてみる

ActionTextの結果を反映させたい<%= @post.title %> を<%=@post.content %>に書き換える

 

以上でAction Textの実装が完成します。

思ったより簡単に実装できた様には感じましたが、正直なところブログくらいしか使い所なくないかとも思いました。Rails6による大幅改修はワクワクする様なよくわからない様な感じ