将 ActionText 字段复制到纯文本字段 Rails

Copy an ActionText field to a plain text field Rails

我需要在 Rails ActionText 字段中搜索文本。找不到任何解决方案,所以我创建了一个纯文本字段,当提交 ActionText 表单时,before_ save self.content_plain_text = content.body.to_plain_text 是 运行。这很好用,我可以在 content_plain_text.

中搜索

但现在我需要为所有现有数据更新 content_plain_text。发现这个 How do I move a column (with contents) to another table in a Rails migration? 有一个迁移。我以为我可以模仿那个,但这行不通。

class CopyContentToContentPlainText < ActiveRecord::Migration[6.0]
  def up
    Doc.find_each do |d|
      content_plain_text = action_text_rich_texts.record_id[d].content.body.to_plain_text
      Content.create!(doc_id: d.id, content_plain_text: content_plain_text)
    end
  end
end

我在获取 ActionText 字段时迷路了。 record_id对应于doc_id

正如您已经定义的那样before_save

before_save { self.content_plain_text = content.body.to_plain_text }

然后每当你调用 a_doc.save 时,before_save 将被触发,因此,它的 content_plain_text 将被分配给 content.body.to_plain_text

因此您可以更新所有 Doc 记录的 content_plain_text 只需简单调用 save

class CopyContentToContentPlainText < ActiveRecord::Migration[6.0]
  def up
    Doc.find_each(&:save)
  end
end