Ruby on rails 如何使用ActionText为数据种子添加富文本?
在我的模型中,我有:Ruby on rails 如何使用ActionText为数据种子添加富文本?,ruby-on-rails,ruby-on-rails-6,actiontext,Ruby On Rails,Ruby On Rails 6,Actiontext,在我的模型中,我有: class Listing < ApplicationRecord ... has_rich_text :description ... end 类列表
class Listing < ApplicationRecord
...
has_rich_text :description
...
end
类列表
在my seeds.rb中:
@listing = Listing.new(
title: 'CODE VEIN',
price: 59.99 * 100,
description: "<p>#{Faker::Lorem.paragraphs(number: 30).join(' ')}</p>",
seller_id: seller.id,
release_date: Date.parse('Sep 26, 2019'),
status: :active,
esrb: 'MATURE'
)
@listing=listing.new(
标题:“代码静脉”,
价格:59.99*100,
描述:“{Faker::Lorem.段落(编号:30).连接(“”)}”,
卖方id:seller.id,
发布日期:日期(2019年9月26日),
状态::活动,
esrb:“成熟”
)
Listing.description变为nil,导致我的NOTNULL约束出错
我已经用pry进行了调试,并尝试了@listing.description.body=text
或@listing.description.body=ActionText::Content.new(text)
,这两种方法仍然会导致列表描述为零
这是一个仅API的项目,但我在前端react应用程序中使用Trix RTE。是否有一种特定的方法来为富文本列设置种子?您的代码中肯定还有其他问题。如果您共享迁移和完整的列表类文件,可能更容易发现发生了什么 以下是确保正确操作的几个步骤:
l = Listing.new(description: "<p>Something nice</p>")
l.save!
Listing.first.description
l=Listing.new(描述:“一些不错的东西””)
l、 救命!
清单1.first.description
正如您所看到的,这足以用富文本保存/为新列表添加种子。因此,通过添加不同的验证或回调,您可能在其他地方发生的任何事情都应该是您造成的。如果不查看整个文件,很难说ActionText将实际内容存储在一个单独的
action\u text\u rich\u text
表中,该表使用多态关联链接回其所连接的模型
# This migration comes from action_text (originally 20180528164100)
class CreateActionTextTables < ActiveRecord::Migration[6.0]
def change
create_table :action_text_rich_texts do |t|
t.string :name, null: false
t.text :body, size: :long
t.references :record, null: false, polymorphic: true, index: false
t.timestamps
t.index [ :record_type, :record_id, :name ], name: "index_action_text_rich_texts_uniqueness", unique: true
end
end
end
#此迁移来自action_text(最初为20180528164100)
类CreateActionTextTables
ActionText的JavaScript组件(实际上是整个要点)在用户与Trix交互以创建/更新action\u text\u rich\u text
表中的行时自动发送AJAX请求,甚至在保存正在创建的记录之前
然后提交表单时,实际上是将id提交到action\u text\u rich\u text
表上的行,而不是提交内容。然后,当您保存模型时,它会使用模型中的记录类型和记录id更新上的action\u-rich\u-text
对应行。这是一个非常尴尬的解决方案,它是围绕着永远不必向模型中添加列的想法构建的
我真的不认为在API中使用ActionText有什么意义,因为整个要点是向经典rails应用程序添加一个快速而肮脏的Trix实现。你真的应该只需要一个文本栏就能解决这个问题。特别是因为这样可以让您无需加入即可访问内容。还涉及到其他内容-它被称为ActionText,并将内容存储在完全不同的表中。因此,是否从数据库中删除该列?我试试看。我正在使用它,因为我仍然需要一个富文本编辑器在前端。ckeditor是我真正的选择,但内置支持听起来更好。我猜它可能与ActionStorage(一种非常类似的设计)具有相同的奇怪行为,#description
将返回nil,直到您将记录保存为实际查询action_text_rich_text表(而不是属性)为止。删除:description列后,我可以通过将其保存为@listing.description.body=@listing.description.body=“{Faker::Lorem.unique.parations(编号:30)。join(“”)}”
)来访问测试。然后,执行@listing.description.body.to_plain_text
或@listing.description.body.to_trix_html
,问题是uuid作为主键而不是整数ID
rails g model listing description:text
class CreateListings < ActiveRecord::Migration[6.0]
def change
create_table :listings do |t|
t.text :description, null: false
t.timestamps
end
end
end
rake db:migrate
rails c
l = Listing.new(description: "<p>Something nice</p>")
l.save!
Listing.first.description
# This migration comes from action_text (originally 20180528164100)
class CreateActionTextTables < ActiveRecord::Migration[6.0]
def change
create_table :action_text_rich_texts do |t|
t.string :name, null: false
t.text :body, size: :long
t.references :record, null: false, polymorphic: true, index: false
t.timestamps
t.index [ :record_type, :record_id, :name ], name: "index_action_text_rich_texts_uniqueness", unique: true
end
end
end