Yet Another request to help DRY some code

The essential element I'm missing (I think), is some sort of hook to help me iterate through all of my model's to_one relationships.

My model has lots of them, but for a given object only 1 matters. So "att_value" is supposed to represent whichever one it is that matters. (and the one that matters is determined by another attribute called class_name)

class PageAttribute < ActiveRecord::Base

  belongs_to :page

  has_one :boolean_page_attribute, :class_name => 'BooleanPageAttribute', :dependent => :destroy   has_one :date_page_attribute, :class_name => 'DatePageAttribute', :dependent => :destroy   has_one :string_page_attribute, :class_name => 'StringPageAttribute', :dependent => :destroy   has_one :page_link_page_attribute, :class_name => 'PageLinkPageAttribute', :dependent => :destroy   has_one :uploaded_file_page_attribute, :class_name => 'UploadedFilePageAttribute', :dependent => :destroy

  def att_value     if(self.class_name.to_s == 'BooleanPageAttribute')       return self.boolean_page_attribute     end     if(self.class_name.to_s == 'DatePageAttribute')       return self.date_page_attribute     end     if(self.class_name.to_s == 'StringPageAttribute')       logger.debug "returning string_page_attribute" + string_page_attribute.to_s       return self.string_page_attribute     end     if(self.class_name.to_s == 'PageLinkPageAttribute')       return self.page_link_page_attribute     end     if(self.class_name.to_s == 'UploadedFilePageAttribute')       return self.uploaded_file_page_attribute     end   end

  def att_value=(val)     if(self.class_name.to_s == 'BooleanPageAttribute')       if val.is_a? Hash         self.boolean_page_attribute.attributes = val       else         self.boolean_page_attribute = val       end     end     if(self.class_name.to_s == 'DatePageAttribute')       if val.is_a? Hash         self.date_page_attribute.attributes = val       else         self.date_page_attribute = val       end     end     if(self.class_name.to_s == 'StringPageAttribute')       if val.is_a? Hash         self.string_page_attribute.attributes = val       else         self.string_page_attribute = val       end     end     if(self.class_name.to_s == 'PageLinkPageAttribute')       if val.is_a? Hash         self.page_link_page_attribute.attributes = val       else         self.page_link_page_attribute = val       end     end     if(self.class_name.to_s == 'UploadedFilePageAttribute')       if val.is_a? Hash         self.uploaded_file_page_attribute.attributes = val       else         self.uploaded_file_page_attribute = val       end     end   end

...etc...

end

thanks, Jacob