Текст действия Rails для существующего текстового поля

Я обновляю одно из своих новостных приложений до Rails 6.0.0. Во время работы у меня возникла проблема с использованием Rich Text. Мое приложение указывает на поле тела форматированного текста вместо существующего поля тела таблицы.

Можно ли использовать существующее текстовое поле таблицы для форматированного текста, чтобы я мог редактировать содержимое, когда мне это нужно. Как и для новых сообщений, я могу использовать таблицу action_text_rich_texts, но для существующих сообщений я хочу использовать существующее поле тела таблицы.


person Santosh Aryal    schedule 29.08.2019    source источник


Ответы (2)


Помощник ActionText has_rich_text определяет методы получения и установки.

Вы можете снова переопределить метод body, предоставив ActionText значение, хранящееся в таблице, используя read_attribute:

class Post
  has_rich_text :body

  # Other stuff...
  
  def body
    rich_text_body || build_rich_text_body(body: read_attribute(:body))
  end
person Artem Ignatiev    schedule 01.12.2019
comment
Шикарное решение! Хотя должно быть read_attribute(:body). Преимущество этого решения заключается в постепенном преобразовании огромной базы данных со старыми текстами вместо того, чтобы перегружать БД во время миграции (возможно, зацикливание через тысячи записей). Спасибо! - person morgler; 23.06.2021
comment
Спасибо! Я обновил код, чтобы исправить опечатку - person Artem Ignatiev; 25.06.2021

Предполагая, что в вашей модели есть content и это то, что вы хотите перенести, сначала добавьте в свою модель:

has_rich_text :content

Затем создайте миграцию

rails g migration MigratePostContentToActionText

Результат:

class MigratePostContentToActionText < ActiveRecord::Migration[6.0]
  include ActionView::Helpers::TextHelper
  def change
    rename_column :posts, :content, :content_old
    Post.all.each do |post|
      post.update_attribute(:content, simple_format(post.content_old))
    end
    remove_column :posts, :content_old
  end
end

См. Этот комментарий к проблеме Rails.

person Richard    schedule 29.05.2020