I have an application which reads in a large log file in a known
format where each entry in the log maps to a specific class. I'm
modeling it using STI where I have a "generic" type to hold the log
entries and store them in the database in a single table. Then I have
a background thread which goes through each generic log entry and
further categorizes them into more concrete subclass types.
It looks something like this:
class Human
include DataMapper::Resource
property :id, Serial
property:type, Discriminator
property :name, String
property :birthdate, Date
end
class Person < Human; end
class Woman < Human; end
class Man < Human; end
class Child < Human; end
...
# Create all the generic People
Person.create(:name => "Paul", :birthdate => Time.now - 30.years)
Person.create(:name => "Mary", :birthdate => Time.now - 35.years)
Person.create(:name => "Pat", :birthdate => Time.now - 3.years)
# Filter all the generic people into "real" subclass types
Person.each {|p| p.update!(:type => "Man") if p.name == "Paul" &&
Time.now - p.birthdate >= 18.years
When I try something similar in my app I get:
ArgumentError - The attribute 'type' is not accessible in Person
Can anyone give me some advice on how to make this work? Is there some
trick to changing the sti type after it is already saved?
Thanks!
--
You received this message because you are subscribed to the Google Groups
"DataMapper" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/datamapper?hl=en.