У меня есть четыре таблицы: jp_properties, cn_properties, jp_dictionaries и cn_dictioanries.
И каждый jp_property принадлежит jp_dictionary с внешним ключом «dictionary_id» в таблице.
Точно так же каждый cn_property принадлежит cn_dictionary с внешним ключом "dictionary_id" в таблице тоже.
Поскольку в модели свойств и в модели словаря много одинаковых функций, я хотел бы сгруппировать все эти функции в abstract_class.
Модели такие:
class Property < AR::Base
self.abstract_class = true
belongs_to :dictionry,
:foreign_key=>'dictionary_id',
:class=> ---ModelDomainName--- + "Dictionary"
### functions shared by JpProperty and CnProperty
end
class Dictionary < AR::Base
self.abstract_class = true
has_many :properties,
:foreign_key=>'dictionary_id',
:class=> ---ModelDomainName--- + "Dictionary"
### functions shared by JpDictionary and CnDictionary
end
class JpProperty < Property
:set_table_name :jp_properties
end
class CnProperty < Property
:set_table_name :cn_properties
end
class JpDictionary < Dictionary
:set_table_name :jp_dictionaries
end
class CnDictionary < Dictionary
:set_table_name :cn_dictionaries
end
Как видно из вышеприведенного кода, часть --- ModelDomainName --- имеет значение «Jp» или «Cn».
И я хочу получить эти строки динамически из экземпляров JpProperty, JpDictionary, CnProperty или CnDictionary.
Например:
tempJpProperty = JpProperty.first
tempJpProperty.dictionary #=> will get 'Jp' from tempJpProperty's class name and then apply it to the "belongs_to" declaration.
Итак, проблема в том, что я не знаю, как указать часть --- ModelDomainName ---.
В частности, я понятия не имею, как получить имя класса экземпляра объекта подкласса в теле родительского класса.
Не могли бы вы помочь мне с этой проблемой?
Edit:
У кого-нибудь есть идеи?
По сути, я хочу спросить, как ' отложить создание ассоциации до
подкласс создан . '?