ruby on rails - práctico - ¿Cómo usar ActiveRecord en un script de ruby fuera de Rails?
ruby on rails tutorial (3)
Tengo un pequeño script de ruby en el que me gustaría usar ActiveRecord para acceder fácilmente a un modelo de base de datos. ¿Cuál es la mejor manera de hacerlo?
Puede crear un script mínimo con una base de datos SQLite en memoria en solo unas pocas líneas. Esta respuesta también está disponible como una Gist .
Inspirado en la publicación del blog de Jon Leighton sobre cómo publicar un impresionante informe de errores de ActiveRecord.
# 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.
Vale la pena señalar que en versiones posteriores de activerecord (v3 +) necesita requerirlo como tal
require "active_record"
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