Лучший способ в RoR изменить строку модели на привязку перезаписи с передачей контента в производство - PullRequest
0 голосов
/ 31 марта 2020

Я сталкиваюсь с проблемой в RoR, которая находится за пределами моего понимания. Это сценарий, но он соответствует проблеме, которую я должен решить для приложения Rails, уже работающего с тысячами пользователей.

Скажем, у меня есть модель (на самом деле, у меня много моделей, у которых есть эта проблема) , но проблема должна быть похожей?)

Class User << ApplicationRecord
#and the logic here
end

# with the following schema

  create_table "users", force: :cascade do |t|
    t.string "name", null: false
    t.string "description", null: false
    #and more
  end

Но теперь я реализовал гораздо более приятный description на своем Frontend, который использует хороший HTML wisiwig. Поэтому я создал методы для очистки содержимого et c. Через некоторое время мне нужно добавить столько функций в это поле description, что поддерживать его как string в БД становится громоздко!

Я хочу создать текстовую модель, в которой можно сохранить все эти данные, чтобы я мог повторно использовать ее для многих моделей в моем приложении с помощью polymorphi c ассоциация

Итак, я хочу иметь

Class User << ApplicationRecord
has_one :description, as :textable
# and some more logic
end

Class Text << ApplicationRecord
# Here goes the whole text logic, auto translation etc etc
belongs_to :textable, :polymorphic => true
end

# with the following schema

create_table "users", force: :cascade do |t|
  t.string "name", null: false
  #and more
end

create_table "texts", force: :cascade do |t|
  t.string "textable_type"
  t.bigint "textable_id"
  t.string "content"
  #and more
end

Как мне изменить это И перенести содержимое User.description в новую запись текста, которую я затем прикреплю как описание

Я знаю, что мог бы сделать это через консоль болезненным способом, но есть ли способ Rails , чтобы сделать это? Мои интуитивные ощущения говорят мне, что это может быть сделано во время миграций?

Спасибо!

...