Generator
Create a new collection using the built-in generator:
bin/rails generate content Post
This will create the following files:
-
app/content/posts/(all.md,.erbcontent will be added here) app/models/content/post.rbapp/controllers/content/posts_controller.rbapp/views/content/posts/index.html.erbapp/views/content/posts/show.html.erb
And adds a route: resources :posts, module: :content, only: %w[index show]
View all available commands with
bin/rails generate content --help
Create the only needed action with:
bin/rails generate content Post show
Inline content
Use --inline to generate a show action that does not need a show.html.erb template because the resource has all the needed HTML. It will create a show action like this:
def show
@resource = Content::Page.find!(params[:id]) # where `Page` is the collection name
render @resource.inline
end
This is useful for resources that do not need shared HTML as a show.html.erb provides.
Creating new content files
Once a collection is created, quickly generate new content files:
bin/rails generate content Post --new
bin/rails generate content Post --new "My First Post"
This creates a new file in app/content/posts/ based on a template (if one exists).
Using templates
Drop a template file in the content directory to define the structure for new files:
---
title: <%= @title %>
published_at: <%= Time.current %>
---
# <%= @title %>
Start writing here…
If no template exists, an empty file with frontmatter dashes is created.
Template filenames support strftime parameters for dynamic naming, when respectively a title (eg. My First Post) and no title is passed:
-
template.md.tt; generatesmy-first-post.mdanduntitled.md -
%Y-%m-%d-template.md.tt; generates2026-01-01-my-first-post.mdand2026-01-01-untitled.md
On this page