I have a small ruby script in which I'd like to use ActiveRecord to easily access a database model. What is the best way to do it?
Asked
Active
Viewed 2.3k times
3 Answers
93
require 'active_record'
# Change the following to reflect your database settings
ActiveRecord::Base.establish_connection(
adapter: 'mysql2', # or 'postgresql' or 'sqlite3' or 'oracle_enhanced'
host: 'localhost',
database: 'your_database',
username: 'your_username',
password: 'your_password'
)
# Define your classes based on the database, as always
class SomeClass < ActiveRecord::Base
#blah, blah, blah
end
# Now do stuff with it
puts SomeClass.find :all
some_class = SomeClass.new
-
undefined method `require_gem' - you mean gem "activerecord"? – Daniel Cukier Oct 29 '09 at 14:10
-
2The require_gem call is deprecated. It should be require "activerecord" now. – kafuchau Oct 29 '09 at 14:13
-
Another related question: how to have an environment sensible database.yml? – Daniel Cukier Oct 29 '09 at 15:42
-
1it's 'gem install activerecord' and require 'active_record', I know, confusing – peter Jul 20 '16 at 21:02
10
It's worth noting that in later versions of activerecord (v3+) you need to require it like so
require "active_record"

Andy Henson
- 407
- 4
- 3
-
Thanks for your answer. But where is "active_record" actually loaded from? – BenKoshy May 16 '20 at 09:35
8
You can create a minimal script with an in-memory SQLite database in just a few lines. This answer is also available as a Gist.
Inspired by Jon Leighton's blog post on how to post an awesome ActiveRecord bug report.
# Based on http://www.jonathanleighton.com/articles/2011/awesome-active-record-bug-reports/
# Run this script with `$ ruby my_script.rb`
require 'sqlite3'
require 'active_record'
# Use `binding.pry` anywhere in this script for easy debugging
require 'pry'
# Connect to an in-memory sqlite3 database
ActiveRecord::Base.establish_connection(
adapter: 'sqlite3',
database: ':memory:'
)
# Define a minimal database schema
ActiveRecord::Schema.define do
create_table :shows, force: true do |t|
t.string :name
end
create_table :episodes, force: true do |t|
t.string :name
t.belongs_to :show, index: true
end
end
# Define the models
class Show < ActiveRecord::Base
has_many :episodes, inverse_of: :show
end
class Episode < ActiveRecord::Base
belongs_to :show, inverse_of: :episodes, required: true
end
# Create a few records...
show = Show.create!(name: 'Big Bang Theory')
first_episode = show.episodes.create!(name: 'Pilot')
second_episode = show.episodes.create!(name: 'The Big Bran Hypothesis')
episode_names = show.episodes.pluck(:name)
puts "#{show.name} has #{show.episodes.size} episodes named #{episode_names.join(', ')}."
# => Big Bang Theory has 2 episodes named Pilot, The Big Bran Hypothesis.
# Use `binding.pry` here to experiment with this setup.

Thomas Klemm
- 10,678
- 1
- 51
- 54
-
This is great, as a start. So how do I move from this to a database that persists? – Jonathan Tuzman Feb 10 '19 at 04:23