ссылки на ваш вопрос конкретно, вот что я хотел бы сделать:
Все данные в вашей модели Bar
будут сохранены в соответствии с моделью Bar
.Это означает, что если вы измените атрибут foo_id
в своей модели, вы сможете просто заполнить атрибут bar_type
, который необходимо добавить (поскольку все они смогут ссылаться на ту же модель)
Способ сделать это выглядит следующим образом:
- Создание миграции для
foo_id
>fooable_id
- Вставьте
fooable_type
колонку
- в рельсах консоли, проходное всех существующих записей
Bar
, заполняя fooable_type
столбец
Первые вещи первое:
$ рельсам г миграции ChangeFooID
#db/migrate/latest.rb
class Latest
def change
rename_column :bars, :foo_id, :fooable_id
add_column :bars, :fooable_type, :string, after: :id
end
end
Это позволит создать различные столбцы для вас. Тогда вам просто необходимо, чтобы иметь возможность перебрать записи & изменения type
колонки:
рельсы гр
Bar.find_each do |bar|
bar.update(barable_type: "Foo")
end
Это позволит вам изменить тип ваших колонок, что дает вам способность связывать все текущие записи с соответствующими записями.
полиморфизм
Вы сможете use the Rails docs as a reference о том, как связать ваши модели:
#app/models/foo.rb
class Foo < ActiveRecord::Base
has_many :bars, as: :barable
end
#app/models/bar.rb
class Bar < ActiveRecord::Base
belongs_to :foo, polymorphic: true
end
Ой, вау, ты все еще пользуешься Rails 2? Это настоящая или опечатка? –