Несмотря на то, что я вижу, откуда вы идете, по поводу путаницы с расположениеморяд_предоставляется в этом случае, обоснование основано на том, где в схеме БД находится ключ Foreign_key.Таблица документов содержит foreign_key, который связывает его с объектом PdfMetaData, поэтому не имеет смысла описывать отношения наоборот, поскольку не было бы никакого способа иметь отношение has_many (как бы вы сохранили несколько внешних ключей встрока базы данных?)
Надеюсь, это имеет смысл ... но для второй проблемы решение зависит от списка допустимых атрибутов ваших классов TXTMetaData
и PDFMetaData
.Если они имеют одинаковые атрибуты (или, по крайней мере, те, которые вы хотите, чтобы они были доступны в вашей форме, совпадают), тогда вы должны быть в порядке с
fields_for :metadata do |meta_fields|
meta_fields.text_field :attr
meta_fields.text_fields :attr2
end
и т. Д.
Если вы хотитечтобы выставить другие атрибуты, я бы предложил определить класс вашего объекта метаданных и действовать соответственно, например
meta_obj = document.metadata
fields_for :metadata, meta_obj do |meta_fields|
if meta_obj.is_a?(PDFMetaData)
meta_fields.text_field :attr
meta_fields.text_fiels :attr2
elsif meta_obj.is_a?(TXTMetaData)
meta_fields.text_field :other_attr
meta_fields.text_fiels :other_attr2
end
end