Comment utiliser ActiveRecord dans un script Ruby en dehors de Rails?

J’ai un petit script Ruby dans lequel j’aimerais utiliser ActiveRecord pour accéder facilement à un modèle de firebase database. Quelle est la meilleure façon de le faire?

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 

Il est à noter que dans les versions ultérieures de activerecord (v3 +), vous devez l’exiger ainsi.

 require "active_record" 

Vous pouvez créer un script minimal avec une firebase database SQLite en mémoire en quelques lignes seulement. Cette réponse est également disponible sous forme de liste .

Inspiré de l’article de Jon Leighton sur la façon de publier un rapport de bogue ActiveRecord impressionnant.


 # 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.ssortingng :name end create_table :episodes, force: true do |t| t.ssortingng :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.