[RUBY] Quelle est la structure des données d'ActionText?

J'ai personnellement eu l'occasion de présenter ʻAction Text, alors prenez note. Lors du développement de quelque chose comme un service de blog, je me demandais comment introduire ʻActionText dans le modèle ʻArticle`, donc j'espère que cela aidera quelqu'un.

Qu'est-ce que le texte d'action?

L'une des fonctionnalités disponibles depuis rails6. Introduisez du contenu texte riche et des fonctionnalités d'édition dans Rails

Ce que je veux faire cette fois

Je souhaite créer un service de publication d'articles. Créez un modèle d'article avec trois données, un titre, une description et un corps, et introduisez ActionText pour modifier le corps.

Structure de données

ʻCréation d'un modèle qui introduit ActionText`

ʻArticle` Génère un modèle. «title» est le titre de l'article et «description» est la description de l'article. Notez que nous ne créons pas de colonnes pour stocker les données du corps.

rails g model Article title:string description:text

ʻIntroduire ActionText`

ʻActionText` peut être installé avec la commande suivante.

rails action_text:install

Lorsque vous installez ActionText, deux fichiers de migration sont générés. L'un est un fichier lié à ʻActive Storage, et l'autre est un fichier qui crée une table de ʻActionText. Ce dernier tableau est la clé de la structure de données que je veux expliquer dans cet article.

Le contenu de texte enrichi est stocké dans son propre modèle RichText, qui est associé à tout modèle d'enregistrement actif existant dans l'application. Toutes les images intégrées (et autres pièces jointes) sont automatiquement stockées dans Active Storage et associées au modèle RichText inclus.

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

En associant les données ci-dessus au modèle ʻArticle`, il est possible d'éditer le contenu de l'article avec du texte enrichi. Lier les données est facile, ajoutez-les au modèle comme suit.

article.rb


class Article < ApplicationRecord
  has_rich_text :content
end

De quel type de structure de données s'agit-il?

Comme expliqué ci-dessus, la table ʻArticle contient titleetdescription, et le contenu de l'article ( content) est conservé dans la table ʻActionText :: RichText. Si vous regardez les résultats de la console ci-dessous, ce sera plus facile à imaginer.

#Obtenir les données du modèle d'article
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: "tester", description: "testerです">

#ActionText associé au modèle Article::Obtenir des données RichText
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">

#Comment obtenir le contenu d'un article?
irb(main):003:0> Article.all.first.content.body
=> #<ActionText::Content "<div class=\"trix-conte...">

Recommended Posts

Quelle est la structure des données d'ActionText?
'% 02d' Quel est le% de% 2?
Qu'est-ce qu'un test? ・ À propos de l'importance d'un test
Quelle est la méthode pluck?
Qu'est-ce que la classe BufferedReader?
Rails6: saisissez les données initiales d'ActionText à l'aide de seed
A quoi sert le constructeur?
Quelle est la méthode d'initialisation?
Quelle est la représentation de la connaissance du domaine dans le modèle [DDD]?
Quel genre de StringUtil est bon
Filtrer les fluctuations des données brutes
Qu'Est-ce que c'est? ~ 3 types de "non" ~
Quel type de méthode est define_method?
Vous voulez savoir ce que Ruby n est la puissance de 2? (Jugement de puissance de 2)
Qu'est-ce que @Override ou @SuppressWarnings ("SleepWhileInLoop") devant la fonction? ?? ??
Structure de données
Quelle est la meilleure lecture de fichier (Java)
Quelles sont les fonctionnalités mises à jour de Java 13
À quoi sert le modèle de façade?
Le contenu des données enregistrées par CarrierWave.
Qu'est-ce que Cubby
Apprenez plus clairement avec des diagrammes !! Structure du modèle de l'application Web Qu'est-ce que le modèle MVC?
Qu'est-ce qui est nul? ]
Le trait de soulignement ActiveSupport n'est pas la conversion inverse de camelize
Qu'est-ce que 'java
Qu'est-ce que Keycloak
Qu'est-ce que le modèle Java Servlet / JSP MVC?
Qu'est-ce que maven?
L'ordre des modificateurs de méthode Java est fixe
Qu'est-ce que Jackson?
Ce qui est différent du langage PHP. [Remarque]
Qu'est-ce que soi
Qu'est-ce que ArgumentMatcher?
Qu'est-ce que IM-Juggling?
Qu'est-ce que les paramètres
Qu'est-ce que SLF4J?
Qu'est-ce que la façade? ??
Quel est le modificateur volatile pour les variables Java?
Qu'est-ce que Gradle?
Qu'est-ce que POJO
Quelle est la différence entre SimpleDateFormat et DateTimeFormatter? ??
Qu'est-ce que 'java
Qu'est-ce que centOS
Qu'est-ce que RubyGem?
Quels sont les avantages de DI et de Thymeleaf?
Qu'est-ce que before_action?
Qu'est-ce que Docker
Récupérer le premier jour de la semaine dans les paramètres régionaux actuels (quel jour est-il aujourd'hui?)
Le nom officiel de Spring MVC est Spring Web MVC
Qu'est-ce que Byte?
Qu'est-ce que Tomcat
L'essence de l'humeur d'AspectJ - pourquoi votre `@ Transactional` est ignoré
Vérifiez l'existence de has_many et appartient_to-optional: Qu'est-ce qui est vrai?
Quand le survol d'Eclipse est difficile à voir
Dans Time.strptime,% j (date totale de l'année) est