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.

Reply via email to