【问题标题】:Saving headings, subheadings, paragraphs and table data in a database在数据库中保存标题、副标题、段落和表格数据
【发布时间】:2014-12-06 07:56:03
【问题描述】:

我计划创建包含大量用户贡献文本的视图,这些文本以标题、副标题、段落和表格数据的形式出现。现在,我有单独的标题、副标题和段落模型,具有适当的 belongs_to 和 has_many 关系。在我看来,保存这些用户数据的更理想的解决方案就在那里。我正在寻找另一种工具来有效地将这些信息保存在数据库中。

非常感谢您的帮助。

class Fly < ActiveRecord::Base
    has_many :headings
    accepts_nested_attributes_for :headings, allow_destroy: true
end

class Heading < ActiveRecord::Base
    belongs_to :fly
    has_many :subheadings
    accepts_nested_attributes_for :subheadings, allow_destroy: true
end

class Subheading < ActiveRecord::Base
    belongs_to :heading
    has_many :paragraphs
    accepts_nested_attributes_for :paragraphs, allow_destroy: true
end

class Paragraph < ActiveRecord::Base
    belongs_to :subheading
end

【问题讨论】:

  • 你能解释一下你所说的混乱和不理想是什么意思吗?慢吗?对视图抽象没有帮助吗?您还可以向我们展示模型及其关联吗?
  • 对我而言,这似乎很混乱且不理想,因为在我看来,以标题/段落/表格形式保存用户内容似乎很常见。我不确定创建单独的模型是理想的方法。将在模型和关联中进行编辑。
  • 是的,这是正确的。我正在寻找另一种工具来有效地将这些信息保存在数据库中。

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 database-design


【解决方案1】:

您可以将内容存储为 Textile 或 Markdown 之类的东西。您需要的只是每个文档的单个记录,而不是标题和子标题的大树。标题、副标题和段落包含在 Textile 或 Markdown 中。

在您的文档记录中,您将存储 Textile 或 Markdown 内容以及您关心的任何元数据。

Textile 和 Markdown 有很多引擎可以编译成 html。当需要显示您的内容时,您需要做的就是将其提供给引擎并将其返回给您的 html 输出。

如果您希望您的用户编写内容,您可以让他们直接编写 Markdown 或 Textile,或者使用某种所见即所得的工具来生成 Textile 或 Markdown。

Textile 和 Markdown 都是非常简单的语言。用户应该很容易上手。

我在 Google 上进行了快速搜索,看起来 Markdown 和 Textile 的所见即所得编辑器确实存在。

【讨论】:

    【解决方案2】:

    试试这个:

    尝试使用ckeditortinymce 是专为简化Web 内容创建而设计的即用型HTML 文本编辑器。这是一个所见即所得的编辑器,可将常用的文字处理器功能直接带到您的网页中。

    要将它们与 Rails 应用程序集成,请使用这些 gem ckeditortinymce-rails

    【讨论】:

      【解决方案3】:

      您的模型的复杂性只是反映了类似于文档的内容结构。如果您想查询内容的标题、副标题、段落和表格部分,那么您必须有模型/表格来区分和记录这些部分。 (实际上,对于最小的标题-副标题-段落模型,您给出的内容甚至不够复杂。例如,标题下的段落和标题下的子标题都有一个相关的序数位置。)

      即使您对内容使用非关系形式,如果您想在各部分之间做出这些区分,那么接口运算符和托管状态也必须反映该结构。 请记住,XML、HTML、Word 或 noSQL 意义上的“文档”是通用的。如果您的应用程序具有特定的标题、副标题、段落和表格结构,那么您将不得不通过声明框架来描述该结构,就像“混乱”一样,但语法不同。

      每个关系模型/表都有一个关联的参数化语句。例如,“标题 [标题] 的第 #[no] 段具有段落文本 [文本]”。当字段/列值替换参数名称时,模型/表保存形成真实语句的记录/行。例如,记录/行 给出“标题 '5.1' 的第 7 段有文本 '...'”。关系数据库中唯一非特定于应用程序的结构是它的模型/表,其内容列举了描述应用程序的事实。

      我不能推荐一个宝石来利用之前的工作。但是模式示例就在那里。 Eg these documents with section titles, section texts and images.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        • 1970-01-01
        • 2020-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多