Что я хочу сделать, так это иметь базовый класс для некоторых из моих моделей, который имеет поведение по умолчанию activerecord:
class Option < ActiveRecord::Base
has_many :products
def some_method
#stuff
end
#etc..etc..
end
class ColorOption < Option
#stuff...
end
class FabricOption < Option
#stuff...
end
Тем не менее, я хочу, чтобы ColorOption и FabricOption были для каждого в своих собственных таблицах. Я НЕ хочу использовать STI или иметь таблицу для базового класса "Option". Единственный способ заставить меня работать с этим - это использовать некую наследственную магию метапрограммирования. Но мне было интересно, есть ли способ сказать AR, что базовому классу не нужна таблица. Это просто для дополнительного поведения и для того, чтобы поместить другие подклассы в их собственную таблицу, как обычно.
Спасибо, Крейг
Похоже на футляр для модуля, который вы включаете.
module Option
def self.included(base)
base.has_many :products
end
# other instance methods
end
class ColorOption < ActiveRecord::Base
include Option
set_table_name '???' # unless ColorOption / FabricOption have same table -> move to Option module
#stuff...
end
class FabricOption < Option
include Option
set_table_name '???' # unless ColorOption / FabricOption have same table -> move to Option module
#stuff...
end
Дополнительная информация: http://mediumexposure.com/multiple-table-inheritance-active-record/
Вам нужен абстрактный класс:
class Option < ActiveRecord::Base
self.abstract_class = true
end
class ColorOption < Option
...
end
class FabricOption < Option
...
end