Using Rails 6 ActionText
I have started using Rails 6 even though it is not fully out, the integration of webpack, Action Cable, ActionText, ActionView and lot of other background task have improved Rails and make it faster. The one I am particularly happy about is Action Text.
Design an Application for Blogs have never been made easy before we’d integrate other external libraries and configure the application. Now, with the integration of Action Text which uses Trix which was design by Basecamp developers, just some lines of code, we should be able to design a fully functional blog.
In this article, we will be building an application where users can create a blog using Action text as their textarea in Rails 6.
Prerequisites⌗
Before we begin, make sure you have ruby version ≥ 2.2 and rails version ≥ 6 installed on your local machine.
If your ruby version is not up-to-date, you can update with a ruby version manager such as rvm or rbenv
Rails 6 is not fully out but we can install the pre version rails-6.0.0.rc1.
$ rvm install "ruby-2.4.6"
or
$ rbenv install 2.4.6## You can install rails by running
$ gem install rails --pre
That’s all you need, we are good to start.
Project Setup
$ rails new action-text-tutorial --database=postgresql
$ cd action-text-tutorial
With this, all the files and folders needed will be installed. You should see Yarn is also installed and webpack to compile our javascript file.
Since we will be using PostgreSQL, lets added our database credentials. open config/database.yml and fill this with your data.
development:
<<: *default
database: action-text-tutorial_development
username: YOUR_POSTGRES_USERNAME
password: YOUR_POSTGRES_PASSWORDtest:
test:
<<: *default
database: action-text-tutorial_development
username: YOUR_POSTGRES_USERNAME
password: YOUR_POSTGRES_PASSWORD
Create the database by running:
$ rails db:create
Finally, run the server by running:
$ rails server
That’s all we need for the setup lets create the migrations and models needed for this application. we will just build a basic application so we need a blogs model that contains title and body field. You can add a user model if you want to move it forward.
Models⌗
Create the models needed using
$ rails generate model Blog title:string body:text
After that run your migration using
$ rails db:migrate
Action Text Install Run this line to install actiontext dependencies
$ rails action_text:install
This will install the various files needed and also add Trix styling to the application. You can checkout trix.scss file to update the styles.
Run migration to install the migrations added by action-text
$ rails db:migrate
Add this line to your model/blogs.rb to ensure body field uses action text
class Blog < ApplicationRecord
has_rich_text :body
end
That’s all for the models, let’s create a blog resource
$ rails g controller Blogs index new create show
Add this to blogs_controller
class BlogsController < ApplicationController
def index
@blogs = Blog.all
end
def show
@blog = Blog.find(params[:id])
end
def new
@blog = Blog.new
end
def create
@blog = Blog.new(blogs_params)
if @blog.save
redirect_to blogs_path
else
render 'new'
end
end
private
def blogs_params
params.require(:blog).permit(:title, :body)
end
end
Add this to blogs/new.html.erb to create the form. Instead of using textarea for the body field, we used rich_text_area, a helper from action-text.
<h1>Blog#new</h1>
<p>Find me in app/views/blog/new.html.erb</p>
<%= form_for @blog do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= f.label :body %>
<%= f.rich_text_area :body %>
<%= f.submit %>
<% end %>
Run your server and head over to http://localhost:3000/blogs/new , You should see the action text view in its beauty. Write a little blog and submit, you will be redirected to the index page.
Let’s add this to the index page to display all blogs
<h1>Blog#index</h1><p>Find me in app/views/blog/index.html.erb</p>
<h1>All blogs</h1>
<% @blogs.each do |blog| %>
<li><%= link_to blog.title, blog_path(blog) %></li>
<% end %>
Add this to blogs show page to display one blog.
blogs/show.html.erb
<h1>Show page</h1>
<h1> <%= @blog.title %></h1>
<p><%= @blog.body %></p>
That’s all, you can add edit action, delete and others.
If you need the boilerplate that contains all this, head over to this repository and clone it. https://github.com/Danielshow/action-text-tutorial
I am Danielshow. 🕺🏽👻 Buy me a Coffee