2013-06-29 2 views
0

У меня есть модель в Rails, которую я хотел бы использовать в качестве основы для другого.клонирование модели в Rails

пример модели: род. будет шаблон для модели ребенок. Я вижу два возможных варианта:

(1) Наследовать от первой модели, а затем добавить дополнительные столбцы

Class Parent < ActiveRecord::Base 
Class Child < Parent 

(2) Скопировать файл model.rb и добавить новые функции

Class Child < ActiveRecord::Base 

В обоих случаях создается «Rails» часть модели, но как насчет таблицы базы данных? Я мог бы создать таблицу, используя создать дочерний элемент таблицы, как выбрать * из родителя, где 1 = 2, а затем создать миграции для добавления дополнительных столбцов, но это не похоже на «Rails way».

Есть ли простой способ создания миграции на основе существующей таблицы. или я полностью лаяю неправильное дерево?

ответ

2

Ваш (1) называется single table inheritance (STI). В основном вы используете одну таблицу, в которой есть как поля родителя, так и дочернего. Для идентификации типа объекта вам также понадобится столбец type.

Без подробностей я не могу сказать, полезно ли использовать STI в вашем случае, но (2) копирование model.rb, конечно, не кажется правильным.

+0

я вижу. А как насчет второго экземпляра, где я хочу скопировать, но не наследовать. Мне все еще нужно создать таблицу вручную? – ardochhigh

+0

Да, в этом случае вам нужна отдельная таблица для детей, но дублирующий код мне не подходит. – Mischa

+1

@ardichhigh Если вы хотите, чтобы две разные модели делились некоторой логикой, вы можете извлечь ее в модуль. –

Смежные вопросы