views:

331

answers:

1

When using single table inheritance does one have to be careful not to populate the columns which are specific to different models? Is there a way to specify which columns each model uses?

+1  A: 

As far as Rails is concerned, every column can be set in every subclass. You can add logic to your subclass models to prevent certain fields from being set, but there's no automated way to do so. You could probably implement it has a before_save filter.

class MySubModel < MyModel
  UNUSED_FIELDS = %w{ field_x field_y field_z } 
  def before_save
    UNUSED_FIELDS.each {|f| self.send("#{f}=", nil)}
  end
end

Although if you have a lot of columns that are only used by one subclass, STI probably isn't the best inheritance model to use.

Sarah Mei
Ok, that is what I had thought. What other inheritance models would provide similar functionality to STI?
Bryan Ward