Связи столбцов Single Table Inheritance (STI)

При использовании наследования одной таблицы нужно ли быть осторожным, чтобы не заполнять столбцы, характерные для разных моделей? Есть ли способ указать, какие столбцы использует каждая модель?


person Bryan Ward    schedule 21.07.2009    source источник


Ответы (1)


Что касается Rails, каждый столбец может быть установлен в каждом подклассе. Вы можете добавить логику в свои модели подклассов, чтобы предотвратить установку определенных полей, но нет автоматического способа сделать это. Вероятно, вы могли бы реализовать его с фильтром before_save.

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

Хотя, если у вас много столбцов, которые используются только одним подклассом, STI, вероятно, не лучшая модель наследования.

person Sarah Mei    schedule 21.07.2009
comment
Хорошо, это то, что я думал. Какие другие модели наследования могли бы обеспечить аналогичную функциональность STI? - person Bryan Ward; 21.07.2009