開発者向け
Kentico Kontent Ruby onRailsアプリケーションの作成
By Eric Dugre
Kentico Kontent RubySDKがGitHubで利用できるようになりました。今、KontentをRailsアプリケーションに統合し、私たちが提供するすべての便利な機能の恩恵を受けることがこれまでになく簡単になりました!
このチュートリアルに従って、クールなRailsプロジェクトを開始してください。
セットアップ
プロジェクトを開始するには、RubyとRailsがインストールされている必要があります。 Rubyは、ホームページから適切な方法を選択してインストールできます。次に、ガイドを使用してRailsをインストールします。 1つのコマンドのみを実行する必要があります。
gem install rails
新しいRailsプロジェクトを作成するには、データベースなしでプロジェクトを作成する–Oパラメーターを使用することをお勧めします。このチュートリアルでは、ローカルデータベースは必要ありません。また、sqlite3gemのインストールで問題が発生する可能性があります。
rails new kenticorails –O
Visual Studio CodeなどのIDEで新しいRailsプロジェクトを開き、 Gemfileを開きます。ここでは、プロジェクトの実行に必要なRubygemを追加します。 kontent-delivery-sdk-ruby gemと、 render_async gem( https://github.com/renderedtext/render_async )を追加します。
gem 'kontent-delivery-sdk-ruby'gem 'render_async'
テスト走行
この時点で、Railsアプリケーションは少なくとも正常に実行されるはずです。 bundle installを実行してgemをGemfileにインストールしてから、サーバーを起動します。 VSCodeでは、これらのコマンドはCTRL + `を押すことでBashターミナルから実行できます。
bundle installrails server
ブラウザでlocalhost:3000に移動すると、デフォルトのRailsウェルカムページが表示されます。

コントローラとビューの作成
Railsは、アプリケーションで使用するデフォルトのコントローラー/app/controllers/application_controller.rbを作成します。コントローラでKentico :: Kontent :: Delivery :: DeliveryClientを使用できるように変更してみましょう:
class ApplicationController < ActionController::Base PROJECT_ID = ''.freeze @@delivery_client = Kentico::Kontent::Delivery::DeliveryClient.new project_id: PROJECT_IDend
ホームページにいくつかの記事を表示するために使用するのと同じディレクトリにhome_controller.rbを作成します。
class HomeController < ApplicationController def index; endend
今のところ、このコントローラーにはindex.html.erbを表示するアクションが1つあります。クールなものを少し追加します! / app / viewsディレクトリに、「home」という名前の新しいフォルダを作成し、その中にindex.html.erbを作成します。ここに任意のHTMLを追加できます。今のところ、記事リストのプレースホルダーを追加しました。
Latest Dancing Goat Articles
(coming soon)
/app/config/routes.rbファイルを開き、HomeControllerを登録してから、メインドメインにアクセスするときにHomeControllerのindex()アクションを表示するようにRailsに指示します。
Rails.application.routes.draw do resources :home root 'home#index'end
まだ行っていない場合は、ターミナルでCTRL + Cを押して前のサーバーをシャットダウンしてから、Railsサーバーを再実行して変更を表示します。まだ表示されている記事がないので、修正しましょう。
非同期レンダリング
このセクションでは、Kentico Kontentに記事を非同期的に要求し、それらをホームページに表示する新しいアクションをHomeControllerに追加します。これがrender_asyncgemの目的です。このgemを使用すると、Kontentが応答する前にホームページをロードでき、コンテンツは受信されるとレンダリングされます。これは必須ではありませんが、サイトの速度が上がる可能性があることに注意してください。後の「リッチテキストの解決」セクションで、render_asyncを使用しないコントローラーを作成します。
render_asyncが魔法をかけるために必要なスクリプトから始めましょう。終了 body>タグのすぐ上にあるapp / views / layouts /application.html.erbに以下を追加します。
<%= yield %> <%= content_for :render_async %>
app / views / home / index.html.erbで、記事リストをロードする場所をrender_asyncに指示する必要があります。記事を表示するビューに次のブロックを追加します。
Latest Dancing Goat Articles
<%= render_async article_list_path %>
render_async gemは、article_list_pathからデータを要求し、コードブロックが配置されている場所に応答をロードします。 app / config /routes.rbで記事リストパスを定義しましょう。
Rails.application.routes.draw do resources :home get :article_list, :controller => :home root 'home#index'end
HomeControllerでarticle_listアクションを作成します。これにより、呼び出されたときに部分ビューがレンダリングされます。
class HomeController < ApplicationController def index; end def article_list render partial: 'article_tile' endend
最後に、app / views / homeに部分ビュー_article_tile.html.erbを作成します。これは、article_listアクションが呼び出されたときにレンダリングされます。現在、何でも含めることができます。
Articles are almost here..
Railsサーバーを実行し、ホームページをリロードします。 render_asyncがインデックスビュー内に_article_tile.html.erbビューをレンダリングしたことがわかります。

今、楽しいもののために!
Kontent-ifying Rails
いよいよKenticoKontentからデータを取得し、ホームページに表示します。 .itemsメソッドといくつかのフィルタリングオプションを使用します。これらについて詳しくは、こちらをご覧ください。 article_listアクションの本文を次のように変更します。
def article_list @response = @@delivery_client.items( 'system.type'.eq 'article' ) .order_by('elements.post_date', '[desc]') .execute if @response.http_code == 200 render partial: 'article_tile', collection: @response.items, as: :article else logger.info @response.to_s render html: 'Sorry, articles are not available at this time' endend
それで、ここで何が起こっているのですか? ApplicationControllerで定義したクライアントは、「article」タイプのKentico Kontentからすべてのコンテンツアイテムを取得し、それらを_article_tile.html.erbファイルに渡される変数に格納しています。応答が成功すると、各コンテンツアイテムのビューがレンダリングされ、部分ビューで記事としてアクセスできるようになります。それ以外の場合は、応答に関するデータをログに記録し、代わりにプレーンHTMLをレンダリングします。
_article_tile.html.erbパーシャルを変更して、各記事のプレビューをレンダリングし、別のページにリンクして記事全体を読みます。
<%= article.elements.title.value %>
<%= DateTime.parse(article.elements.post_date.value).strftime('%A, %B %e, %Y') %>
style='width:100%' />
<%= article.elements.summary.value %>
ここでサーバーを実行すると、ホームページは次のようになります。

リッチテキストの解決
記事にあるようなリッチテキスト要素には、他のコンテンツアイテム、コンポーネント、および他の多くのものへのリンクを含めることができます。次に、記事のテキストを表示するページを作成し、リッチテキストフィールドに含まれるこれらのオブジェクトのいずれかを解決します。
まず、/ app / controllersにArticleControllerを作成します。これは、リクエストの記事のコードネームを使用して、KenticoKontentからコンテンツアイテムを取得します。 〜/ article / some_code_nameなどのURLは、デフォルトのルーティングルールにより、コントローラーのshow()アクションに自動的にマップされます。
class ArticleController < ApplicationController def show codename = params[:id] response = @@delivery_client.item(codename).execute if response.http_code == 200 @article = response.item render partial: 'show' else logger.info response.to_s render html: 'The article you requested couldn\'t be found' end endend
このコントローラーを/app/config/routes.rbに登録します。
Rails.application.routes.draw do resources :home, :article get :article_list, :controller => :home root 'home#index'end
次に、/ app / views / articleに_show.html.erb部分ビューを作成します。
<%= @article.elements.title.value %>
<%= @article.elements.body_copy.value.html_safe %>
ここでRailsサーバーを実行し、インラインコンテンツアイテムを含む記事(/ articles / coffee_beverages_explainedなど)にアクセスすると、インラインコンテンツアイテムが
これはホステッドビデオコンポーネントであることが意図されていますが、InlineContentItemResolverを使用して、サイトでの表示方法を変更する必要があります。インラインアイテムリゾルバーを使用するように/ app / controllers / ApplicationControllerを変更します。
class ApplicationController < ActionController::Base PROJECT_ID = ''.freeze item_resolver = Kentico::Kontent::Delivery::Resolvers::InlineContentItemResolver.new(lambda do |item| if (item.system.type.eql? 'hosted_video') && (item.elements.video_host.value[0].codename.eql? 'youtube') return '' else return '' end end) @@delivery_client = Kentico::Kontent::Delivery::DeliveryClient.new project_id: PROJECT_ID, inline_content_item_resolver: item_resolverend
GitHubリポジトリに記載されているように、要素の解決された値を取得するには、 get_stringメソッドを使用する必要があります。このメソッドを使用するには、_show.html.erbパーシャルを変更します。
<%= @article.elements.title.value %>
<%= @article.get_string('body_copy').html_safe %>
/ article / coffee_beverages_explainedにアクセスすると、記事にYouTubeビデオが表示されます。

リンクの解決
リッチテキスト要素に他のコンテンツアイテムへのリンクが含まれている場合、それらはデフォルトで空のタグとしてレンダリングされます。この例は、アプリケーションの/ article / coffee_processing_techniquesページで確認できます。サイトの他のページへのURLを指定するには、 ContentLinkResolverを実装します。
/app/controllers/application_controller.rbで、InlineContentItemResolverが作成された方法と同様にContentLinkResolverを登録します。
link_resolver = Kentico::Kontent::Delivery::Resolvers::ContentLinkResolver.new(lambda do |link| return '/coffees/#{link.url_slug}' if link.type.eql? 'coffee' return '/article/#{link.code_name}' if link.type.eql? 'article'end)@@delivery_client = Kentico::Kontent::Delivery::DeliveryClient.new project_id: PROJECT_ID, inline_content_item_resolver: item_resolver, content_link_url_resolver: link_resolver
今すぐ/ article / coffee_processing_techniquesにアクセスすると、サイトのコーヒーへのリンクは/ coffees / kenya-gakuyuni-aaなどの他のページを正しく指し示します(ただし、必要なコントローラーは作成されていません)。
成功!
これで、非常に基本的なRailsアプリケーションができました。これは、KenticoCloudを使用して次のクールなRailsプロジェクトを開発するための基盤を提供するはずです。ドキュメントを読んだり、問題や機能のリクエストを送信したりするために、Ruby SDKリポジトリに気軽に立ち寄ってください:https://github.com/Kentico/kontent-delivery-sdk-ruby。