Skip to content

Instantly share code, notes, and snippets.

@solnic
Created January 14, 2015 19:42
Show Gist options
  • Save solnic/8f1e5ee9342cf4d4938b to your computer and use it in GitHub Desktop.
Save solnic/8f1e5ee9342cf4d4938b to your computer and use it in GitHub Desktop.
require 'rom-sql'
setup = ROM.setup('postgres://localhost/rom')
setup.default.adapter.connection.drop_table?(:users)
setup.default.adapter.connection.drop_table?(:groups)
setup.default.adapter.connection.create_table :groups do
Integer :id
String :name, null: false
primary_key [:id]
end
setup.default.adapter.connection.create_table :users do
Integer :id
String :name, null: false
Integer :age, null: false
primary_key [:id]
foreign_key :group, :groups
end
setup.relation(:groups) do
one_to_many :users, key: :group
def with_users
select(:id, :name)
.prefix(:group)
.association_join(:users, select: [:id, :name, :age])
end
end
setup.commands(:users) { define(:create) }
setup.commands(:groups) { define(:create) }
setup.mappers do
define(:groups, prefix: :group, inherit_header: false) do
model name: 'Group'
attribute :id
attribute :name
group :users, prefix: false do
model name: 'User'
attribute :id
attribute :name
attribute :age
end
end
end
rom = setup.finalize
rom.command(:groups).try{ create(id: 1, name: "First Group")}
rom.command(:users).try{ create(id: 1, name: "Edson Michaque", age: 128, group: 1)}
rom.command(:users).try{ create(id: 2, name: "Alberto Michaque", age: 256, group: 1)}
puts rom.read(:groups).with_users.to_a.inspect
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment