Skip to content

Instantly share code, notes, and snippets.

@JoshCheek
Created June 10, 2017 00:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JoshCheek/bda7b1b9f3f967e29b663a537954b0c1 to your computer and use it in GitHub Desktop.
Save JoshCheek/bda7b1b9f3f967e29b663a537954b0c1 to your computer and use it in GitHub Desktop.
Example Active Record stuffs
require 'active_record'
require 'logger'
ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
ActiveRecord::Base.logger = Logger.new $stdout
ActiveSupport::LogSubscriber.colorize_logging = false
# Migrations
ActiveRecord::Schema.define do
self.verbose = false
create_table :orders do |t|
t.string :name
end
create_table :order_lines do |t|
t.string :name
t.integer :amount
t.integer :order_id
end
create_table :shipments do |t|
t.string :name
t.integer :order_id
end
create_table :packages do |t|
t.string :name
t.integer :shipment_id
end
end
# Models
class Order < ActiveRecord::Base
has_many :shipments
has_many :order_lines
end
class OrderLine < ActiveRecord::Base
belongs_to :order
end
class Shipment < ActiveRecord::Base
belongs_to :order
has_many :packages
end
class Package < ActiveRecord::Base
belongs_to :shipment
end
# At some point before the jobs ran
Order.create! name: 'Mah Order!' do |order|
order.order_lines.build name: 'usps package 1', amount: 0
order.order_lines.build name: 'usps package 2', amount: 0
end
# In a job or something
order = Order.includes(:order_lines).find_by!(name: 'Mah Order!')
usps = order.shipments.build name: 'usps'
usps.packages.build name: 'package 1'
usps.packages.build name: 'package 2'
fedex = order.shipments.build name: 'fedex'
fedex.packages.build name: 'package 1'
fedex.packages.build name: 'package 2'
order.save!
# Looking at the results
Order.first # => #<Order id: 1, name: "Mah Order!">
.shipments # => #<ActiveRecord::Associations::CollectionProxy [#<Shipment id: 1, name: "usps", order_id: 1>, #<Shipment id: 2, name: "fedex", order_id: 1>]>
.first # => #<Shipment id: 1, name: "usps", order_id: 1>
.packages # => #<ActiveRecord::Associations::CollectionProxy [#<Package id: 1, name: "package 1", shipment_id: 1>, #<Package id: 2, name: "package 2", shipment_id: 1>]>
.first # => #<Package id: 1, name: "package 1", shipment_id: 1>
.shipment # => #<Shipment id: 1, name: "usps", order_id: 1>
.order # => #<Order id: 1, name: "Mah Order!">
.shipments # => #<ActiveRecord::Associations::CollectionProxy [#<Shipment id: 1, name: "usps", order_id: 1>, #<Shipment id: 2, name: "fedex", order_id: 1>]>
.last # => #<Shipment id: 2, name: "fedex", order_id: 1>
.packages # => #<ActiveRecord::Associations::CollectionProxy [#<Package id: 3, name: "package 1", shipment_id: 2>, #<Package id: 4, name: "package 2", shipment_id: 2>]>
.first # => #<Package id: 3, name: "package 1", shipment_id: 2>
# >> D, [2017-06-09T19:33:17.840381 #43476] DEBUG -- : (2.5ms) CREATE TABLE "orders" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar)
# >> D, [2017-06-09T19:33:17.841465 #43476] DEBUG -- : (0.2ms) CREATE TABLE "order_lines" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "amount" integer, "order_id" integer)
# >> D, [2017-06-09T19:33:17.842013 #43476] DEBUG -- : (0.2ms) CREATE TABLE "shipments" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "order_id" integer)
# >> D, [2017-06-09T19:33:17.842608 #43476] DEBUG -- : (0.2ms) CREATE TABLE "packages" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "shipment_id" integer)
# >> D, [2017-06-09T19:33:17.879043 #43476] DEBUG -- : (0.2ms) CREATE TABLE "ar_internal_metadata" ("key" varchar NOT NULL PRIMARY KEY, "value" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
# >> D, [2017-06-09T19:33:17.892822 #43476] DEBUG -- : ActiveRecord::InternalMetadata Load (0.1ms) SELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? LIMIT ? [["key", "environment"], ["LIMIT", 1]]
# >> D, [2017-06-09T19:33:17.897913 #43476] DEBUG -- : (0.1ms) begin transaction
# >> D, [2017-06-09T19:33:17.899250 #43476] DEBUG -- : SQL (0.2ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["key", "environment"], ["value", "default_env"], ["created_at", "2017-06-10 00:33:17.898276"], ["updated_at", "2017-06-10 00:33:17.898276"]]
# >> D, [2017-06-09T19:33:17.899552 #43476] DEBUG -- : (0.1ms) commit transaction
# >> D, [2017-06-09T19:33:17.930142 #43476] DEBUG -- : (0.1ms) begin transaction
# >> D, [2017-06-09T19:33:17.931030 #43476] DEBUG -- : SQL (0.1ms) INSERT INTO "orders" ("name") VALUES (?) [["name", "Mah Order!"]]
# >> D, [2017-06-09T19:33:17.931609 #43476] DEBUG -- : SQL (0.1ms) INSERT INTO "order_lines" ("name", "amount", "order_id") VALUES (?, ?, ?) [["name", "usps package 1"], ["amount", 0], ["order_id", 1]]
# >> D, [2017-06-09T19:33:17.932294 #43476] DEBUG -- : SQL (0.1ms) INSERT INTO "order_lines" ("name", "amount", "order_id") VALUES (?, ?, ?) [["name", "usps package 2"], ["amount", 0], ["order_id", 1]]
# >> D, [2017-06-09T19:33:17.932576 #43476] DEBUG -- : (0.1ms) commit transaction
# >> D, [2017-06-09T19:33:17.933148 #43476] DEBUG -- : Order Load (0.1ms) SELECT "orders".* FROM "orders" WHERE "orders"."name" = ? LIMIT ? [["name", "Mah Order!"], ["LIMIT", 1]]
# >> D, [2017-06-09T19:33:17.940104 #43476] DEBUG -- : OrderLine Load (0.1ms) SELECT "order_lines".* FROM "order_lines" WHERE "order_lines"."order_id" = 1
# >> D, [2017-06-09T19:33:17.951524 #43476] DEBUG -- : (0.0ms) begin transaction
# >> D, [2017-06-09T19:33:17.952579 #43476] DEBUG -- : SQL (0.1ms) INSERT INTO "shipments" ("name", "order_id") VALUES (?, ?) [["name", "usps"], ["order_id", 1]]
# >> D, [2017-06-09T19:33:17.953065 #43476] DEBUG -- : SQL (0.1ms) INSERT INTO "packages" ("name", "shipment_id") VALUES (?, ?) [["name", "package 1"], ["shipment_id", 1]]
# >> D, [2017-06-09T19:33:17.953624 #43476] DEBUG -- : SQL (0.1ms) INSERT INTO "packages" ("name", "shipment_id") VALUES (?, ?) [["name", "package 2"], ["shipment_id", 1]]
# >> D, [2017-06-09T19:33:17.957567 #43476] DEBUG -- : SQL (0.1ms) INSERT INTO "shipments" ("name", "order_id") VALUES (?, ?) [["name", "fedex"], ["order_id", 1]]
# >> D, [2017-06-09T19:33:17.958309 #43476] DEBUG -- : SQL (0.1ms) INSERT INTO "packages" ("name", "shipment_id") VALUES (?, ?) [["name", "package 1"], ["shipment_id", 2]]
# >> D, [2017-06-09T19:33:17.958792 #43476] DEBUG -- : SQL (0.0ms) INSERT INTO "packages" ("name", "shipment_id") VALUES (?, ?) [["name", "package 2"], ["shipment_id", 2]]
# >> D, [2017-06-09T19:33:17.959006 #43476] DEBUG -- : (0.0ms) commit transaction
# >> D, [2017-06-09T19:33:17.959442 #43476] DEBUG -- : Order Load (0.1ms) SELECT "orders".* FROM "orders" ORDER BY "orders"."id" ASC LIMIT ? [["LIMIT", 1]]
# >> D, [2017-06-09T19:33:17.962210 #43476] DEBUG -- : Shipment Load (0.1ms) SELECT "shipments".* FROM "shipments" WHERE "shipments"."order_id" = ? [["order_id", 1]]
# >> D, [2017-06-09T19:33:17.963649 #43476] DEBUG -- : Package Load (0.1ms) SELECT "packages".* FROM "packages" WHERE "packages"."shipment_id" = ? [["shipment_id", 1]]
# >> D, [2017-06-09T19:33:17.964677 #43476] DEBUG -- : Package Load (0.0ms) SELECT "packages".* FROM "packages" WHERE "packages"."shipment_id" = ? [["shipment_id", 2]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment