Ruby on RailsのDataCMS️
アットRenuo 私たちはしばしばRuby on Railsプロジェクトのヘッドレスムを必要としますDato CMS .
それで、我々は我々を解放することに決めましたDatoCMS client open source .
我々は抽出し、我々が最も有用と考えられている機能を分離し、このチュートリアルでは、ステップバイステップ、どのように使用を開始するかを説明します.
DataCMSセットアップ
レールアプリ😄 Railsだけが実際の要件ですが、宝石によって提供される機能の100 %を使用するには、また、必要があります
Rails > = 7を使用すると、これらのコマンドを実行できます
よくできた.あなたは、単に走ることができるはずです
最初のクエリ
新しいコンポーネントを定義します.Citeブロックの新しいコンポーネントを定義しましょう
これは完全にノードを上書きする方法です.
プレビューモード
それで、我々は我々を解放することに決めましたDatoCMS client open source .
我々は抽出し、我々が最も有用と考えられている機能を分離し、このチュートリアルでは、ステップバイステップ、どのように使用を開始するかを説明します.
DataCMSセットアップ
このチュートリアルで使用できるデータバックエンド用のテンプレートを提供します.
上記のボタンを使用して、最初のDataCMSプロジェクトを設定し、-> APIトークンに進み、後で使用するReadOnly APIトークンを取得します.
プロジェクト設定
次のようにしてください.
次のようにしてください.
turbo
ViewComponents
view_components
and turbo
.Rails > = 7を使用すると、これらのコマンドを実行できます
rails new dato-rails-demo --skip-active-record
cd dato-rails-demo
Gemfileに追加しますgem 'dotenv-rails', groups: [:development, :test]
gem 'view_component'
gem 'dato-rails', require: 'dato'
それからもう一度実行します.bundle install
echo "DATO_API_TOKEN=<YOUR_DATO_API_TOKEN>" > .env
新しいライブラリをインストールし、APIトークンを設定します.よくできた.あなたは、単に走ることができるはずです
bin/rails s
そして、あなたのアプリケーションにアクセスします.最初のクエリ
提供されるプロジェクトにはホームページが含まれます.我々はそれをフェッチしようとします.DataCMSは、クエリを生成するのに非常に便利なGraphSQL APIエクスプローラを提供します.
簡単に起動します.
# app/services/dato/queries.rb
module Dato
module Queries
def homepage_query
GQLi::DSL.query {
homepage {
id
}
}
end
end
end
ここで、ホームページIDを取得するクエリを定義します.
新しいサービスフォルダを追加したので、ここでサーバーを再起動する必要があります.
私たちは常に問い合わせをテストする必要があります.このようなテストは次のようになります.
# test/services/dato/queries_test.rb
require "test_helper"
class DatoQueriesTest < ActiveSupport::TestCase
include Dato::Queries
test 'homepage_query' do
client = Dato::Client.new
response = client.execute(homepage_query)
assert_not_nil response.data.homepage.id
end
end
あなたが緑のテストをするならば、それはあなたがすでにdatocmsからあなたのホームページをうまくやっていることを意味します.
フェッチデータをレンダリングする
我々は今、コントローラとコンポーネントを生成することができますし、我々だけでフェッチデータをレンダリングします.
rails g controller HomepageController
rails g component Homepage
コンポーネントは必須ではありません.また、標準のパーティションを使用することもできますが、その後のライブリロードのようなより高度な機能の恩恵を受ける必要があります.
# app/components/homepage_component.rb
class HomepageComponent < ViewComponent::Base
def initialize(data)
super
@data = data
end
end
# app/components/homepage_component.html.erb
<div>This is the homepage id: <%= @data.homepage.id %></div>
# app/controllers/homepage_controller.rb
class HomepageController < ApplicationController
include Dato::Queries
def show
client = Dato::Client.new
response = client.execute(homepage_query)
render HomepageComponent.new(response.data)
end
end
# config/routes.rb
Rails.application.routes.draw do
root "homepage#show"
end
構造化テキスト
DataCMSで使用する最も重要な分野の一つはStructured Text .
簡単に取得し、それを使用してレンダリングすることができますdato-rails
.
ホームページのクエリを更新します
def homepage_query
GQLi::DSL.query {
homepage {
id
content {
value
blocks {
__typename
id
image {
responsiveImage(imgixParams: {fm: __enum("png")}) {
___ Dato::Fragments::ResponsiveImage
}
}
}
}
}
}
end
上のコードもcontent
我々がホームページで使用するフィールドと私たちは、例に記入した.
構造化テキストフィールドをどのようにレンダリングするかを示します.
<div>This is the homepage id: <%=@data.homepage.id %></div>
<%= render Dato::StructuredText.new(@data.homepage.content) %>
ライブラリは、すでにすべてをレンダリングするために使用できるコンポーネントを提供します.次のようになります.
カスタムブロック
上の例では、例のブロックライブラリにブロックが定義されていることを確認します.そのようなブロックはあなたによって作成されるので、ライブラリはそれらをレンダリングするためのコンポーネントを提供することはできませんが、情報を使用して、自分自身を作成する必要があります.コンポーネントの定義方法については、ページの出力を参照してください.
では、
# app/components/dato/image_block_record.html.erb
<%= render Dato::ResponsiveImage.new(@node.image.responsiveImage) %>
# app/components/dato/image_block_record.rb
module Dato
class ImageBlockRecord < Dato::Node
end
end
これで、単にページを再読み込みすることができますし、ブロックを正しくレンダリングされますresponsive image .
カスタマイズ
簡単に付け加えましょう.我々のCSSapplication.html.erb
よりよく見えます.
<link rel="stylesheet" href="https://cdn.simplecss.org/simple.min.css">
構造化テキストノードをどのようにレンダリングするかをオーバーライドしたい場合は、次の2つの方法があります.
CSSのみ
ノードは、CSSだけで動作することによって、各ノードのルックアンドフィールをカスタマイズするために使用できるHTMLクラスを含んでいます.
.dato-cms-paragraph {
margin-top: 30px;
}
すべての段落ノードに30 pxマージントップを追加します.
コンポーネントのオーバーライド
残念ながらオーバーライドできないonly the template 現時点で.したがって、ノードをさらにカスタマイズしたい場合は、次の手順を実行する必要があります.
# app/services/dato/queries.rb
module Dato
module Queries
def homepage_query
GQLi::DSL.query {
homepage {
id
}
}
end
end
end
# test/services/dato/queries_test.rb
require "test_helper"
class DatoQueriesTest < ActiveSupport::TestCase
include Dato::Queries
test 'homepage_query' do
client = Dato::Client.new
response = client.execute(homepage_query)
assert_not_nil response.data.homepage.id
end
end
我々は今、コントローラとコンポーネントを生成することができますし、我々だけでフェッチデータをレンダリングします.
rails g controller HomepageController
rails g component Homepage
コンポーネントは必須ではありません.また、標準のパーティションを使用することもできますが、その後のライブリロードのようなより高度な機能の恩恵を受ける必要があります.# app/components/homepage_component.rb
class HomepageComponent < ViewComponent::Base
def initialize(data)
super
@data = data
end
end
# app/components/homepage_component.html.erb
<div>This is the homepage id: <%= @data.homepage.id %></div>
# app/controllers/homepage_controller.rb
class HomepageController < ApplicationController
include Dato::Queries
def show
client = Dato::Client.new
response = client.execute(homepage_query)
render HomepageComponent.new(response.data)
end
end
# config/routes.rb
Rails.application.routes.draw do
root "homepage#show"
end
構造化テキスト
DataCMSで使用する最も重要な分野の一つはStructured Text .
簡単に取得し、それを使用してレンダリングすることができますdato-rails
.
ホームページのクエリを更新します
def homepage_query
GQLi::DSL.query {
homepage {
id
content {
value
blocks {
__typename
id
image {
responsiveImage(imgixParams: {fm: __enum("png")}) {
___ Dato::Fragments::ResponsiveImage
}
}
}
}
}
}
end
上のコードもcontent
我々がホームページで使用するフィールドと私たちは、例に記入した.
構造化テキストフィールドをどのようにレンダリングするかを示します.
<div>This is the homepage id: <%=@data.homepage.id %></div>
<%= render Dato::StructuredText.new(@data.homepage.content) %>
ライブラリは、すでにすべてをレンダリングするために使用できるコンポーネントを提供します.次のようになります.
カスタムブロック
上の例では、例のブロックライブラリにブロックが定義されていることを確認します.そのようなブロックはあなたによって作成されるので、ライブラリはそれらをレンダリングするためのコンポーネントを提供することはできませんが、情報を使用して、自分自身を作成する必要があります.コンポーネントの定義方法については、ページの出力を参照してください.
では、
# app/components/dato/image_block_record.html.erb
<%= render Dato::ResponsiveImage.new(@node.image.responsiveImage) %>
# app/components/dato/image_block_record.rb
module Dato
class ImageBlockRecord < Dato::Node
end
end
これで、単にページを再読み込みすることができますし、ブロックを正しくレンダリングされますresponsive image .
カスタマイズ
簡単に付け加えましょう.我々のCSSapplication.html.erb
よりよく見えます.
<link rel="stylesheet" href="https://cdn.simplecss.org/simple.min.css">
構造化テキストノードをどのようにレンダリングするかをオーバーライドしたい場合は、次の2つの方法があります.
CSSのみ
ノードは、CSSだけで動作することによって、各ノードのルックアンドフィールをカスタマイズするために使用できるHTMLクラスを含んでいます.
.dato-cms-paragraph {
margin-top: 30px;
}
すべての段落ノードに30 pxマージントップを追加します.
コンポーネントのオーバーライド
残念ながらオーバーライドできないonly the template 現時点で.したがって、ノードをさらにカスタマイズしたい場合は、次の手順を実行する必要があります.
def homepage_query
GQLi::DSL.query {
homepage {
id
content {
value
blocks {
__typename
id
image {
responsiveImage(imgixParams: {fm: __enum("png")}) {
___ Dato::Fragments::ResponsiveImage
}
}
}
}
}
}
end
<div>This is the homepage id: <%=@data.homepage.id %></div>
<%= render Dato::StructuredText.new(@data.homepage.content) %>
上の例では、例のブロックライブラリにブロックが定義されていることを確認します.そのようなブロックはあなたによって作成されるので、ライブラリはそれらをレンダリングするためのコンポーネントを提供することはできませんが、情報を使用して、自分自身を作成する必要があります.コンポーネントの定義方法については、ページの出力を参照してください.
では、
# app/components/dato/image_block_record.html.erb
<%= render Dato::ResponsiveImage.new(@node.image.responsiveImage) %>
# app/components/dato/image_block_record.rb
module Dato
class ImageBlockRecord < Dato::Node
end
end
これで、単にページを再読み込みすることができますし、ブロックを正しくレンダリングされますresponsive image .カスタマイズ
簡単に付け加えましょう.我々のCSSapplication.html.erb
よりよく見えます.
<link rel="stylesheet" href="https://cdn.simplecss.org/simple.min.css">
構造化テキストノードをどのようにレンダリングするかをオーバーライドしたい場合は、次の2つの方法があります.
CSSのみ
ノードは、CSSだけで動作することによって、各ノードのルックアンドフィールをカスタマイズするために使用できるHTMLクラスを含んでいます.
.dato-cms-paragraph {
margin-top: 30px;
}
すべての段落ノードに30 pxマージントップを追加します.
コンポーネントのオーバーライド
残念ながらオーバーライドできないonly the template 現時点で.したがって、ノードをさらにカスタマイズしたい場合は、次の手順を実行する必要があります.
<link rel="stylesheet" href="https://cdn.simplecss.org/simple.min.css">
.dato-cms-paragraph {
margin-top: 30px;
}
# app/components/dato/fancy_cite.rb
class Dato::FancyCite < Dato::DastNode
def initialize(node, root)
super(node, "blockquote", root)
end
end
# app/components/dato/fancy_cite.html.erb
<blockquote>
<% @node.children&.each do |node| %>
<%= render_node(node) %>
<% end %>
<p>
<cite>– <%= @node.attribution %></cite>
</p>
</blockquote>
# config/initializers/dato.rb
Dato::Config.overrides = {
blockquote: 'Dato::FancyCite'
}.with_indifferent_access
初期化子を追加したので、サーバーを再起動します.これは完全にノードを上書きする方法です.
プレビューモード
使用する場合draft/published feature of Dato CMS , クライアントを使用する場合は、モデルのドラフトバージョンを取得できます.次のようにコントローラを変更します.
client = Dato::Client.new(preview: params[:preview].present?)
私たちのホームページモデルのドラフト/プレビューを有効にします.
プロジェクトの設定に進み、モデルを選択し、ホームページモデルを選択し、「モデルを編集」をクリックします.
今、あなたはどのようにページがpreview
URLのパラメータと、ホームページの変更を実行します.ヘッドトゥhttp://localhost:3000?preview=true .
リアルタイムモード
あなたのホームページを編集して、前後にあなたのウェブサイトに行って、「リフレッシュ」を打つたびにdatocmsに取り組むことは、退屈で時間がかかるかもしれません.リアルタイムモードでは、データの最も興味深い機能の1つであり、また、それを使用するときにレールを使用する恩恵を受けることができます.
あなたがする必要がある唯一のことは、あなたのコンポーネントをDato::Live
コンポーネントとルートをマウントします.
コントローラの動作を次のように変更します.
def show
render Dato::Live.new(HomepageComponent,
homepage_query,
preview: params[:preview].present?,
live: params[:live].present?)
end
エンジンのルートをマウントします.
# config/routes.rb
Rails.application.routes.draw do
root "homepage#show"
mount Dato::Engine => '/dato'
end
ページに追加し、パラメータを追加する?live=true&preview=true
URLにライブリロードをお楽しみください.
Reference
この問題について(Ruby on RailsのDataCMS️), 我々は、より多くの情報をここで見つけました
https://dev.to/coorasse/datocms-with-ruby-on-rails-3ae5
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
client = Dato::Client.new(preview: params[:preview].present?)
あなたのホームページを編集して、前後にあなたのウェブサイトに行って、「リフレッシュ」を打つたびにdatocmsに取り組むことは、退屈で時間がかかるかもしれません.リアルタイムモードでは、データの最も興味深い機能の1つであり、また、それを使用するときにレールを使用する恩恵を受けることができます.
あなたがする必要がある唯一のことは、あなたのコンポーネントを
Dato::Live
コンポーネントとルートをマウントします.コントローラの動作を次のように変更します.
def show
render Dato::Live.new(HomepageComponent,
homepage_query,
preview: params[:preview].present?,
live: params[:live].present?)
end
エンジンのルートをマウントします.# config/routes.rb
Rails.application.routes.draw do
root "homepage#show"
mount Dato::Engine => '/dato'
end
ページに追加し、パラメータを追加する?live=true&preview=true
URLにライブリロードをお楽しみください.Reference
この問題について(Ruby on RailsのDataCMS️), 我々は、より多くの情報をここで見つけました https://dev.to/coorasse/datocms-with-ruby-on-rails-3ae5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol