How to Use Plain SQL in Rails

Image for post
Image for post

Using plain SQL in Rails helps in boosting your application’s performance. It might be easier to use the built-in ActiveRecord methods, but it is not efficient when it comes to the time that is required to receive a response from the database.

This blog post will teach you how to use plain SQL queries instead of using ActiveRecord methods.

Using ActiveRecord methods is not best practice because there are a few layers to go through to actually reach the database; there is a Rails layer, a Ruby layer until you finally get to the layer that actually communicates to the database.

Here is an example of how to use an ActiveRecord method, all, to scan all the posts and select to retrieve a single post with a specific title:
post = Post.all.select { |post| post.title == title }

Instead, you can use raw SQL to get the same result quicker as follows:
sql = "SELECT * FROM posts WHERE title=#{title}"
record = ActiveRecord::Base.connection.execute(sql)

Here we are defining sql as a string that carries the SQL query and then we run this query directly through the database connection, which is faster than ActiveRecord methods. Also, we are assuming that the ‘title’ is specified beforehand as the title for the post you are looking for. Also, if you aren’t familiar with string interpolation in Ruby, here is a quick recap:
adj = "Awesome"
title = "Rails is #{adj}"

Here the value of ‘title’ is: "Rails is Awesome"

Hope this was clear enough for you to understand the difference between running database queries using the ActiveRecord methods and plain SQL.

Comment below if you would like to add anything to this blog.

Written by

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store