Rails ActiveRecord - наследование от базового класса без таблицы

Что я хочу сделать, так это иметь базовый класс для некоторых из моих моделей, который имеет поведение по умолчанию 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, что базовому классу не нужна таблица. Это просто для дополнительного поведения и для того, чтобы поместить другие подклассы в их собственную таблицу, как обычно.

Спасибо, Крейг

19
задан fregas 20 August 2010 в 16:44
поделиться

2 ответа

Похоже на футляр для модуля, который вы включаете.

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/

17
ответ дан 30 November 2019 в 01:56
поделиться

Вам нужен абстрактный класс:

class Option < ActiveRecord::Base
  self.abstract_class = true
end

class ColorOption < Option
  ...
end

class FabricOption < Option
  ...
end
55
ответ дан 30 November 2019 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: