I personally had the opportunity to introduce ʻAction Text, so make a note. When developing something like a blog service, I was wondering how to introduce ʻActionText
into the ʻArticle` model, so I hope it helps someone.
One of the features that has been available since rails6. Introduce rich text content and editing capabilities to Rails.
I would like to create an article posting service. Create an Article model with three data, title, description, and body, and introduce ActionText to edit the body.
ʻGenerates an Articlemodel.
title is the title of the article and
description` is the description of the article. Note that we do not create columns to store the body data.
rails g model Article title:string description:text
ʻActionText` can be installed with the following command.
rails action_text:install
When you install ActionText, two migration files are generated.
One is a file related to ʻActive Storage, and the other is a file that creates a table of ʻActionText
.
The latter table is the key to the data structure we want to discuss in this article.
Rich text content is stored in its own RichText model, which is associated with any existing Active Record model in your application. All embedded images (and other attachments) are automatically stored in Active Storage and associated with the included RichText model.
https://railsguides.jp/action_text_overview.html#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB
class CreateActionTextTables < ActiveRecord::Migration[5.2]
def change
create_table :action_text_rich_texts do |t|
t.string :name, null: false
t.text :body, limit: 16777215
t.references :record, null: false, polymorphic: true, index: false
t.datetime :created_at, null: false
t.datetime :updated_at, null: false
t.index [ :record_type, :record_id, :name ], name: "index_action_text_rich_texts_uniqueness", unique: true
end
end
end
By associating the above data with the ʻArticle` model, it is possible to edit the content of the article with rich text. Linking the data is easy, add it to the model as follows.
article.rb
class Article < ApplicationRecord
has_rich_text :content
end
As explained above, the ʻArticle table holds
titleand
description, and the content of the article (
content) is kept in the table ʻActionText :: RichText
. If you look at the results of the console below, it will be easier to imagine.
#Get Article model data
irb(main):001:0> Article.all.first
=> #<Article id: 1, created_at: "2020-07-11 13:19:00", updated_at: "2020-07-11 13:19:00", title: "test", description: "testです">
#ActionText associated with the Article model::Get RichText data
irb(main):002:0> Article.all.first.content
=> #<ActionText::RichText id: 1, name: "content", body: #<ActionText::Content "<div class=\"trix-conte...">, record_type: "Article", record_id: 1, created_at: "2020-07-11 13:19:00", updated_at: "2020-07-11 13:19:00">
#How to get the content of an article?
irb(main):003:0> Article.all.first.content.body
=> #<ActionText::Content "<div class=\"trix-conte...">
Recommended Posts