Rails - 如何对操作文本使用批量导入?
Rails - How to use bulk import with action text?
我正在构建一个 rails 6 应用程序,但我遇到了一个问题。
假设我有一个 table 任务,它有 3 个字段:
- id
- 状态
- 描述
由于 ActionText,描述字段实际上是一个 rich_text 字段。
我的问题是我有一个由 3 列(id、状态、描述)组成的 csv 文件,在应用程序初始化期间,我想使用批量导入用它填充我的数据库。
通常情况下,如果 description 是一个普通的列,我会这样做:
Task.insert_all(
# My csv converted in array of hashes [{state: YY, description: ZZZZZZZ}]
)
但由于描述并不是 table 任务的真正属性,因此它不起作用。我怎样才能仍然使用批量导入来导入大量数据,但仍然使用 action_text 个字段?
现在,我被迫使用 "one by one" 插入,这需要很长时间!
感谢您提供任何线索。
我认为最简单的方法是像这样拆分您的输入:
# Tasks
tasks = { id: XX, state: YY, ... }
# Descriptions
descriptions = { record_type: 'Task', record_id: XX, name: 'description', body: 'Actual body' }
那么你可以这样做:
Task.insert_all(tasks)
ActionText::RichText.insert_all(descriptions)
这是您要找的吗?
============================================= ===========
更新:
为了阐明其工作原理,我们需要了解 RichText
模型与 Rails 中的任何其他模型一样工作,但序列化信息如下所示:https://github.com/rails/rails/blob/master/actiontext/app/models/action_text/rich_text.rb#L11
要查看真正从数据库中提取的内容,我们可以使用助手 *field*_before_type_cast
。例如:
descriptions = [ { record_type: 'Task', record_id: XX, name: 'description', body: '<p>EXAMPLE</p>' } ]
ActionText::RichText.insert_all(descriptions)
ActionText::RichText.last.body => <ActionText::Content....>
ActionText::RichText.last.body_before_type_cast => '<p>EXAMPLE</p>'
此外,请记住,每条记录可以有一个富文本(是 1 - N 多态关联)。因此,如果您尝试为您的任务插入第二个 description
,它将不起作用
我正在构建一个 rails 6 应用程序,但我遇到了一个问题。
假设我有一个 table 任务,它有 3 个字段:
- id
- 状态
- 描述
由于 ActionText,描述字段实际上是一个 rich_text 字段。
我的问题是我有一个由 3 列(id、状态、描述)组成的 csv 文件,在应用程序初始化期间,我想使用批量导入用它填充我的数据库。
通常情况下,如果 description 是一个普通的列,我会这样做:
Task.insert_all(
# My csv converted in array of hashes [{state: YY, description: ZZZZZZZ}]
)
但由于描述并不是 table 任务的真正属性,因此它不起作用。我怎样才能仍然使用批量导入来导入大量数据,但仍然使用 action_text 个字段?
现在,我被迫使用 "one by one" 插入,这需要很长时间!
感谢您提供任何线索。
我认为最简单的方法是像这样拆分您的输入:
# Tasks
tasks = { id: XX, state: YY, ... }
# Descriptions
descriptions = { record_type: 'Task', record_id: XX, name: 'description', body: 'Actual body' }
那么你可以这样做:
Task.insert_all(tasks)
ActionText::RichText.insert_all(descriptions)
这是您要找的吗?
============================================= ===========
更新:
为了阐明其工作原理,我们需要了解 RichText
模型与 Rails 中的任何其他模型一样工作,但序列化信息如下所示:https://github.com/rails/rails/blob/master/actiontext/app/models/action_text/rich_text.rb#L11
要查看真正从数据库中提取的内容,我们可以使用助手 *field*_before_type_cast
。例如:
descriptions = [ { record_type: 'Task', record_id: XX, name: 'description', body: '<p>EXAMPLE</p>' } ]
ActionText::RichText.insert_all(descriptions)
ActionText::RichText.last.body => <ActionText::Content....>
ActionText::RichText.last.body_before_type_cast => '<p>EXAMPLE</p>'
此外,请记住,每条记录可以有一个富文本(是 1 - N 多态关联)。因此,如果您尝试为您的任务插入第二个 description
,它将不起作用