I'm creating an application which uses multiple databases of objects. I'm
trying to switch it to using sequel, but am having problems doing this with
the modeling.
Basically I want to be able to create any number of databases (in-memory
sqlite), and have a model which is specific to each database instance. It
kinda works, but I'm having issues when using model relations.
I think posting some code is the best way of explaining what I'm doing:
#!/usr/bin/ruby
require 'sequel'
# create the database
def newdb
db = Sequel.sqlite
db.create_table(:albums) do
String :name, :primary_key => true
String :artist
end
db.create_table(:tracks) do
String :name, :primary_key => true
String :album
foreign_key [:album], :albums, :on_delete => :cascade
end
db
end
# create the model
db0 = newdb
class Album < Sequel::Model(db0[:albums])
unrestrict_primary_key
end
class Track < Sequel::Model(db0[:tracks])
def_column_alias :album_name, :album
many_to_one :album, :key => :album_name, :key_column => :album
unrestrict_primary_key
end
# define a jukebox
class Jukebox
attr_reader :albums
attr_reader :tracks
def initialize
@db = newdb
@albums = Class.new(Album)
@albums.db = @db
@tracks = Class.new(Track)
@tracks.db = @db
end
end
jb0_album1 = Album.create(:name => 'jb0-album1')
jb0_track1 = Track.create(:name => 'jb0-track1', :album => jb0_album1)
puts Album['jb0-album1'].inspect
puts Track['jb0-track1'].inspect
puts Track['jb0-track1'].album.inspect
puts '----'
jb1 = Jukebox.new
jb1_album1 = jb1.albums.create(:name => 'jb1-album1')
jb1_track1 = jb1.tracks.create(:name => 'jb1-track1', :album => jb1_album1)
puts jb1.albums['jb1-album1'].inspect
puts jb1.tracks['jb1-track1'].inspect
puts jb1.tracks['jb1-track1'].album.inspect
----
Output:
#<Album @values={:name=>"jb0-album1", :artist=>nil}>
#<Track @values={:name=>"jb0-track1", :album=>"jb0-album1"}>
#<Album @values={:name=>"jb0-album1", :artist=>nil}>
----
#< @values={:name=>"jb1-album1", :artist=>nil}>
#< @values={:name=>"jb1-track1", :album=>"jb1-album1"}>
nil
----
As you can see, they don't behave the same. With the Jukebox instance, the
album exists, but when trying to reference it via the Track#album method,
it gives back nil.
Is there any way to accomplish what I'm trying to do?
Sequel 4.5.0
-Patrick
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/groups/opt_out.