Contentful integration for Rails
The following is a tutorial on how to easily integrate Contentful into a Ruby on Rails application. The following blog post assumes that you have created a Content Model inside of Contentful and added some pieces of content.
Include the following line in your
Gemfile and then execute
Head to the API Keys section under setting and copy both your
Space ID and
Content Delivery API - access token. We will set these as environment variables using the names
The helper function #
lib folder I have created a
ContentfulHelper which will essentially act as the bridge that talks to the Contentful service.
require 'contentful' module ContentfulHelper @contentful ||= Contentful::Client.new( access_token: ENV['CONTENTFUL_ACCESS_TOKEN'], space: ENV['CONTENTFUL_SPACE_ID'], dynamic_entries: :auto, raise_errors: true ) def self.all_articles @contentful.entries(content_type: 'article') end end
Consuming your Content #
The code bellow is for the integration test which will be able to pull in data from Contentful. Use a similar technique in your controller to grab data from Contentful.
require 'test_helper' require 'contentful_helper' class ContentfulTest < ActionDispatch::IntegrationTest include ContentfulHelper test "get an array of all the articles" do res = ContentfulHelper.all_articles assert_not_equal(0, res.length) end test "get content for the first article" do res = ContentfulHelper.all_articles first = res.items.first # This test assumes the following fields on your content model: title = first.fields[:title] author = first.fields[:author] assert_equal("some id", first.id) assert_equal("Some title of a blog post here", title) assert_equal("Shahzeb", author) end end
The next steps #
Now that you can successfully fetch content from the Contentful service, you can send the data from your Controller down into your views. As an advanced concept, you should consider caching data from Contentful into a cache (such as Redis) so that your application isn’t repeatedly reaching out to Contentful.