Skip to content

Instantly share code, notes, and snippets.

@maca
Last active August 29, 2015 13:57
Show Gist options
  • Save maca/9651864 to your computer and use it in GitHub Desktop.
Save maca/9651864 to your computer and use it in GitHub Desktop.
require 'sequel'
require 'sequel/extensions/migration'
DB = Sequel.sqlite
Sequel.migration do
change do
create_table(:classes, :ignore_index_errors => true) do
primary_key :cid
end
create_table(:assignments) do
primary_key :id
foreign_key :classid, :classes, :null => false, :key => [:cid]
end
create_table(:assignment_class) do
primary_key :id
foreign_key :classid, :classes, :null => false, :key => [:cid]
foreign_key :assignmentid, :assignments, :null => false, :key => [:id]
String :name
end
create_table(:assignment_policy) do
foreign_key :assignment_class_id, :assignment_class, :null => false, :key => [:id]
TrueClass :printable
primary_key [:assignment_class_id]
end
end
end
Sequel::Migration.descendants.each { |m| m.apply(DB, :up) }
module Models
class Class < Sequel::Model
end
class Assignment < Sequel::Model
plugin :nested_attributes
one_to_one :assignment_class, key: :assignmentid
nested_attributes :assignment_class
end
class AssignmentClass < Sequel::Model(:assignment_class)
plugin :nested_attributes
many_to_one :assignment, key: :assignmentid
one_to_one :assignment_policy
nested_attributes :assignment_policy
end
class AssignmentPolicy < Sequel::Model(:assignment_policy)
unrestrict_primary_key
set_primary_key :assignment_class_id
end
end
include Models
klass = Models::Class.create
assignment = Assignment.create(
classid: klass.pk,
assignment_class_attributes: {
classid: klass.pk,
name: 'assignment-class',
assignment_policy_attributes: {
printable: true
}
}
)
assignment.save.reload
assignment = Assignment.first
assignment.assignment_class_attributes = {
:id => assignment.assignment_class.pk,
:assignmentid => assignment.pk,
:classid => assignment.classid,
:name => 'updated-assignment-class',
:assignment_policy_attributes => {
:assignment_class_id => assignment.assignment_class.pk,
:printable => false
}
}
assignment.save # => Attempt to update object did not result in a single row modification (SQL: UPDATE "assignment_policy" SET "printable" = false, "reworkable" = true WHERE ("assignment_class_id" IS NULL))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment