How to change class of an STI object?


#1

I have some models which use the same table via single table
inheritance. I (think I) need to change objects from one class to
another and not sure how to go about that.

Consider these models:

class Project < ActiveRecord::Base
end

class Goal < Project # inherits project characteristics
end

class Assignment < Project # inherits project characteristics
end

They are distinguished from each other by the ‘type’ column.

class CreateProjects < ActiveRecord::Migration
def self.up
create_table :projects do |t|
t.column :type, :string

end
end
end

How would I convert a ‘Project’ object into a ‘Goal’ object while
preserving other characteristics (id, title, etc.)?

Thanks!


#2

Just change the value in the type column to change the type to any of
the other types. I define a method that aliases to type to make it
easier to access. You will need to reload the data to get a different
Ruby object.

Michael


#3

Thanks Michael. That’s simple enough!